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

时间:2015-04-03 14:35:34

标签: 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); 

输出结果为:

java.lang.IllegalArgumentException: Invalid BSON field name name

知道怎么解决吗? 谢谢!

3 个答案:

答案 0 :(得分:40)

使用:

coll.updateOne(eq("name", "frank"), new Document("$set", new Document("age", 33)));

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

coll.updateMany(eq("name", "frank"), new Document("$set", new Document("age", 33)));

在此链接上,您可以罚款quick reference to MongoDB Java 3 Driver

答案 1 :(得分: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));

答案 2 :(得分:1)

你可以试试这个

coll.findOneAndReplace(doc1, doc2);