使用新 bulkWrite()
API 手册中的示例,考虑以下包含以下文档的测试集合:
{ "_id" : 1, "char" : "Brisbane", "class" : "monk", "lvl" : 4 },{ "_id" : 2, "char" : "Eldon", "class" : "alchemist", "lvl" : 3 },{ "_id" : 3, "char" : "Meldane", "class" : "ranger", "lvl" : 3 }以下 bulkWrite()
对
characters集合执行多项操作:
Mongo外壳:
try { db.characters.bulkWrite([ { insertOne:{ "document":{ "_id" : 4, "char" : "Dithras", "class" : "barbarian", "lvl" : 4 } } }, { insertOne:{ "document": { "_id" : 5, "char" : "Taeln", "class" : "fighter", "lvl" : 3 } } }, { updateOne: { "filter" : { "char" : "Eldon" }, "update" : { $set : { "status" : "Critical Injury" } } } }, { deleteOne: { "filter" : { "char" : "Brisbane"} } }, { replaceOne: { "filter" : { "char" : "Meldane" }, "replacement" : { "char" : "Tanys", "class" : "oracle", "lvl" : 4 } } } ]);}catch (e) { print(e); }打印输出:
{ "acknowledged" : true, "deletedCount" : 1, "insertedCount" : 2, "matchedCount" : 2, "upsertedCount" : 0, "insertedIds" : { "0" : 4, "1" : 5 }, "upsertedIds" : { }}等效的Java 3.2实现如下:
MongoCollection<document> collection = db.getCollection("characters");List<WriteModel<document>> writes = new ArrayList<WriteModel<document>>();writes.add( new InsertOneModel<document>( new document("_id", 4) .append("char", "Dithras") .append("class", "barbarian") .append("lvl", 3) ));writes.add( new InsertOneModel<document>( new document("_id", 5) .append("char", "Taeln") .append("class", "fighter") .append("lvl", 4) ));writes.add( new UpdateOneModel<document>( new document("char", "Eldon"), // filter new document("$set", new document("status", "Critical Injury")) // update ));writes.add(new DeleteOneModel<document>(new document("char", "Brisbane")));writes.add( new ReplaceOneModel<document>( new document("char", "Meldane"), new document("char", "Tanys") .append("class", "oracle") .append("lvl", 4) ));BulkWriteResult bulkWriteResult = collection.bulkWrite(writes);对于您的问题,请使用replaceOne()
方法,并将其实现为
MongoCollection<document> collection = db.getCollection("collection");List<WriteModel<document>> writes = Arrays.<WriteModel<document>>asList( new ReplaceOneModel<document>( new document("_id", 1001), // filter new document("author", "newName"), // update new UpdateOptions().upsert(true) // options ) );BulkWriteResult bulkWriteResult = collection.bulkWrite(writes);


