1

I still have problems with insert/update of multiple items. The thing is I have a list of N items, each of which (item) I want to insert. But if an item with the same unique key already exists, I want to have it updated instead. (An item contains a unique key.) So basically I want to upsert each individual item using a single roundtrip.

Of course I can do this item by item, but I wish I could do this using a batch, so I don't need N roundtrips.

Is there a way of doing this (Java)?

dexter
  • 738
  • 2
  • 10
  • 19

1 Answers1

0

this is what works:

public static BulkWriteResult upsertAll(MongoCollection<Document> coll, List<Document> docs, String keyTag) {
    List<UpdateOneModel<Document>> requests = new ArrayList<UpdateOneModel<Document>>();
    UpdateOptions opt = new UpdateOptions().upsert(true);
    for (Document doc : docs ) {
        BasicDBObject filter = new BasicDBObject(keyTag, doc.get(keyTag)); 
        BasicDBObject action = new BasicDBObject("$set", doc);
        requests.add(new UpdateOneModel<Document>(filter, action, opt));
    }
    return coll.bulkWrite(requests);
}
dexter
  • 738
  • 2
  • 10
  • 19