2015-04-03 12 views
16

Przechodzę do wersji 3 sterownika MongoDB Java. Nie mogę ustalić, jak przeprowadzić aktualizację dokumentu. Na przykład, aby zmienić "wiek" danego użytkownika:Aktualizacja MongoDB przy użyciu sterownika 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); 

wyjście jest:

java.lang.IllegalArgumentException: Invalid BSON field name name 

Każdy pomysł jak to naprawić? Dzięki!

Odpowiedz

39

przeznaczenie:

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

aktualizowania pierwszy wpis znaleziono. Dla wielu aktualizacje:

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

na ten link, można Fine quick reference to MongoDB Java 3 Driver

+0

Dzięki! to działa! – user2824073

+4

Co za co ??? '$ set' to Jiffa !!! Kto myślał o tej ukrytej/ukrytej dyrektywie? Co to właściwie znaczy w porównaniu do innych dyrektyw _i nie wiem_ ukrytych/ukrytych? –

+1

@ AlikElzin-kilaka, nie wiem, co oznacza "Jiffa", ale jestem pewien, że jesteśmy zgodni co do zwariowanego sposobu przekazywania komendy set na serwer. Sterownik powinien był zawinąć '$ set',' $ inc' itd. – Paul

1

Można spróbować tej

coll.findOneAndReplace(doc1, doc2); 
11

w MongoDB kierowcy Java 3.0, podczas aktualizacji dokumentu, można wywołać metodę coll.replaceOne zastąpić dokument lub zadzwoń metoda coll.updateOne/coll.updateMany do aktualizacji dokumentów za pomocą operatorów $ set/$ setOnInsert/etc.

w Twoim przypadku, możesz spróbować:

coll.updateOne(eq("name", "frank"), new Document("$set", new Document("age", 33))); 
coll.replaceOne(eq("name", "frank"), new Document("age", 33)); 
Powiązane problemy