使用Java 3驱动程序进行MongoDB更新

use*_*073 16 mongodb-java

我正在切换到MongoDB Java驱动程序版本3.我无法弄清楚如何执行Document的更新.例如,我想更改用户的"年龄":

MongoDatabase db = mongoClient.getDatabase("exampledb");
MongoCollection<org.bson.Document> coll = db.getCollection("collusers");

Document doc1 = new Document("name", "frank").append("age", 55) .append("phone", "123-456-789");
Document doc2 = new Document("name", "frank").append("age", 33) .append("phone", "123-456-789");
coll.updateOne(doc1, doc2); 
Run Code Online (Sandbox Code Playgroud)

输出是:

java.lang.IllegalArgumentException: Invalid BSON field name name
Run Code Online (Sandbox Code Playgroud)

知道怎么解决吗?谢谢!

Fra*_*oni 40

使用:

coll.updateOne(eq("name", "frank"), new Document("$set", new Document("age", 33)));
Run Code Online (Sandbox Code Playgroud)

用于更新找到的第一个文档.对于多个更新:

coll.updateMany(eq("name", "frank"), new Document("$set", new Document("age", 33)));
Run Code Online (Sandbox Code Playgroud)

在此链接上,您可以快速参考MongoDB Java 3驱动程序

  • 什么什么什么???`$ set`是Jiffa !!! 谁想到了这个隐含/隐藏指令?与其他_i不知道隐式/隐藏指令相比,它实际上意味着什么? (4认同)

Zho*_* Pu 11

在Mongodb Java驱动程序3.0中,当您更新文档时,可以调用coll.replaceOne方法来替换文档,或者调用coll.updateOne/coll.updateMany方法来使用$ set/$ setOnInsert/etc来更新文档运营商.

在你的情况下,你可以尝试:

coll.updateOne(eq("name", "frank"), new Document("$set", new Document("age", 33)));
coll.replaceOne(eq("name", "frank"), new Document("age", 33));
Run Code Online (Sandbox Code Playgroud)