我正在尝试进行批量upsert,但是我有问题要弄清楚如何去做。这不起作用:
BasicDBObject filter = new BasicDBObject();
BasicDBObject update = new BasicDBObject("$set", list);
UpdateOptions options = new UpdateOptions().upsert(true);
collection.updateMany(filter, update, options);
线程中的异常" main" com.mongodb.MongoWriteException:修饰符对字段进行操作,但我们找到了一个数组。
任何例子都会很棒!
这就是我的意思:
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);
}
答案 0 :(得分:0)
这可能有效
db.collection.update({},{$ set:{&#34; my_field&#34;:[1,2,3]}},false,true)
答案 1 :(得分:0)
您可以使用以下代码执行批量转发:
MongoClient mongo = new MongoClient("localhost", 27017);
DB db = (DB) mongo.getDB("testDB");
DBCollection collection = db.getCollection("collection");
BasicDBObject obj = new BasicDBObject();
obj.append("$set", new BasicDBObject("my_field", dbList));
BasicDBList dbList = new BasicDBList();
dbList.add(1);
dbList.add(2);
dbList.add(3);
BulkWriteOperation bwo = collection.initializeUnorderedBulkOperation();
bwo.find(new BasicDBObject()).upsert().update(obj);
bwo.execute();
有关详细信息,请查看:http://www.journaldev.com/6324/mongodb-upsert-example-using-mongo-shell-and-java-driver