在列表中插入每个对象,如果已存在则更新它

时间:2015-04-15 10:25:37

标签: mongodb upsert multiple-insert

我仍然遇到插入/更新多个项目的问题。问题是我有一个N项目列表,每个项目(项目)我想插入。但是如果已经存在具有相同唯一键的项目,我希望更新它。 (一个项目包含一个唯一的密钥。)所以基本上我想使用一个往返来插入每个单独的项目。

当然我可以逐项完成这项工作,但我希望我能用批量做到这一点,所以我不需要N次往返。

有没有办法做到这一点(Java)?

1 个答案:

答案 0 :(得分:0)

这是有效的:

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);
}