在列表中插入每个对象,如果它已经存在则更新它
insert each object in the list, update it if it exists already
我仍然对 insert/update 多个项目有问题。问题是我有一个包含 N 个项目的列表,我想插入每个(项目)。但是如果已经存在具有相同唯一键的项目,我想改为更新它。 (一个项目包含一个唯一的键。)所以基本上我想使用一次往返更新每个单独的项目。
当然我可以逐项完成,但我希望我可以使用批处理来完成,这样我就不需要 N 次往返。
有没有办法做到这一点 (Java)?
这是有效的方法:
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);
}
我仍然对 insert/update 多个项目有问题。问题是我有一个包含 N 个项目的列表,我想插入每个(项目)。但是如果已经存在具有相同唯一键的项目,我想改为更新它。 (一个项目包含一个唯一的键。)所以基本上我想使用一次往返更新每个单独的项目。
当然我可以逐项完成,但我希望我可以使用批处理来完成,这样我就不需要 N 次往返。
有没有办法做到这一点 (Java)?
这是有效的方法:
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);
}