2015-04-03 135 views
16

我正在切換到MongoDB Java驅動程序版本3.我無法弄清楚如何執行文檔的更新。例如,我想改變一個用戶的「年齡」:使用Java 3驅動程序的MongoDB更新

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 

不知道如何解決它? 謝謝!

回答

39

用途:

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

+0

謝謝!有用! – user2824073 2015-04-04 13:29:11

+4

什麼是什麼? '$ set'是吉法!誰想到這個隱含/隱藏的指示?與其他_i不知道隱式/隱藏指令相比,它實際上意味着什麼? – 2015-08-26 10:15:07

+1

@ AlikElzin-kilaka,我不知道「Jiffa」是什麼意思,但我確定我們非常同意set命令傳遞給服務器的瘋狂方式。司機應該已經包裝了'$ set','$ inc'等。 – Paul 2016-09-01 15:11:16

1

你可以試試這個

coll.findOneAndReplace(doc1, doc2); 
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));