2015-04-03 18 views
16

Tôi đang chuyển sang phiên bản trình điều khiển Java MongoDB 3. Tôi không thể tìm ra cách thực hiện cập nhật Tài liệu. Ví dụ, tôi muốn thay đổi "tuổi" của một người sử dụng:Cập nhật MongoDB bằng trình điều khiển Java 3

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); 

Đầu ra là:

java.lang.IllegalArgumentException: Invalid BSON field name name 

Bất kỳ ý tưởng làm thế nào để sửa chữa nó? Cảm ơn!

Trả lời

39

này sử dụng:

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

để cập nhật các tài liệu đầu tiên được tìm thấy. Đối với nhiều cập nhật:

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

Mở liên kết này, bạn có thể tinh một quick reference to MongoDB Java 3 Driver

+0

Cảm ơn! nó hoạt động! – user2824073

+4

Điều gì là gì ??? '$ set' là Jiffa !!! Ai nghĩ về chỉ thị ẩn/ẩn này? Điều đó thực sự có ý nghĩa gì so với các _i không biết_ chỉ thị ẩn/ẩn? –

+1

@ AlikElzin-kilaka, tôi không biết "Jiffa" có nghĩa là gì nhưng tôi chắc chắn chúng tôi rất đồng ý về cách thức điên rồ trong đó lệnh thiết lập được chuyển tới máy chủ. Người lái xe nên đã quấn '$ set',' $ inc', v.v. – Paul

1

Bạn có thể thử

coll.findOneAndReplace(doc1, doc2); 
11

trong MongoDB Java lái xe 3.0, khi bạn cập nhật một tài liệu, bạn có thể gọi phương thức coll.replaceOne để thay thế tài liệu, hoặc cuộc gọi phương thức coll.updateOne/coll.updateMany để cập nhật (các) tài liệu bằng cách sử dụng toán tử $ set/$ setOnInsert/etc.

trong trường hợp của bạn, bạn có thể thử:

coll.updateOne(eq("name", "frank"), new Document("$set", new Document("age", 33))); 
coll.replaceOne(eq("name", "frank"), new Document("age", 33)); 
Các vấn đề liên quan