2015-04-03 20 views
16

MongoDB Java sürücüsü sürüm 3'e geçiyorum. Bir Belgenin güncelleştirmesinin nasıl gerçekleştirileceğini anlayamıyorum.Java 3 sürücüsünü kullanarak MongoDB güncelleştirmesi

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

çıkışı:

java.lang.IllegalArgumentException: Invalid BSON field name name 

Bir fikrin nasıl düzeltilir Örneğin, ben bir kullanıcının "yaş" değiştirmek istiyorum? Teşekkürler!

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

bulunan ilk Belgesi güncellemek için:

cevap

39

kullanın deneyebilirsiniz. Birden güncellemeleri için: Belgeyi güncelleştirmek bu bağlantıda

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

, ince bir quick reference to MongoDB Java 3 Driver mongodb Java sürücüsü 3.0

+0

Teşekkür! işe yarıyor! – user2824073

+4

Ne ne ne ??? '$ set' Jiffa'dır! Bu gizli/gizli yönergeyi kim düşündü? Diğer _i don't know_ örtülü/gizli direktiflerle karşılaştırıldığında ne anlama geliyor? –

+1

@ AlikElzin-kilaka, "Jiffa" nın ne anlama geldiğini bilmiyorum ama eminim ki set komutunun sunucuya aktarıldığı çılgın yol hakkında çok fazla anlaşıyoruz. Şoför, görünüşe göre, $ set', 'inc' vb. – Paul

1

Bu

coll.findOneAndReplace(doc1, doc2); 
11

, belgeyi değiştirmek için coll.replaceOne yöntemini çağırın veya arama yapabilirsiniz $ set/$ setOnInsert/etc operatörlerini kullanarak belge (ler) güncelleştirmek için coll.updateOne/coll.updateMany yöntemi. senin durumunda

, deneyebilirsin:

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