2016-08-08 16 views
0

Ich möchte Array-Element mit Java MongoDB-Treiber ändern. Ich bin in der Lage, ein neues Paar in das Array einzufügen, kann aber den Wert für einen bestimmten Schlüssel nicht ändern.Wert des Array-Elements mit Java MongoDB-Treiber ändern

Wie kann ich erhöhen a von 2 in dummy Array für Dokument

{ "_id" : ObjectId("57a87614d03a435e4be44bb9"), "dummy" : [ { "a" : 1 }, { "b" : 5 } ] } 

mit Java MongoDB-Treiber? Hier

ist, was ich versucht habe

BasicDBObject query = new BasicDBObject(); 
query.put("_id",doc_id_here); 
BasicDBObject incValue = new BasicDBObject("dummy.$.a", 1); 
BasicDBObject intModifier = new BasicDBObject("$inc", incValue); 
coll.update(query, intModifier, false, false, WriteConcern.SAFE); 
+0

{ "_id": ObjectId ("57a87614d03a435e4be44bb9"), "Dummy": [{ "a": 1}, { "b": 5} ]} –

+0

zeigen, was haben Sie versucht, bereits von Java-Code hinzufügen auf Ihre Frage – tarashypka

+0

BasicDBObject query = new BasicDBObject(); \t query.put ("_ id", doc_id_here); \t BasicDBObject incValue = neu BasicDBObject ("dummy. $. A", 1); \t BasicDBObject intModifier = neues BasicDBObject ("$ inc", incValue); \t coll.update (Abfrage, intModifier, false, false, WriteConcern.SAFE); –

Antwort

0

Ihre Anfrage in Mongo

Shell
db.collection.update( 
    { "_id": ObjectId("57a87614d03a435e4be44bb9") }, 
    { $inc: { "dummy.$.a": 1 } } 
); 

in Fehler führen wird

Die Positions Betreiber nicht, das Spiel finden benötigt aus die Abfrage. von nicht-expandierten Update:. Dummy $ a

da, um Positions $ Operator für dummy Array verwenden Sie erhalten auf diesem Array in Ihrer Anfrage

db.collection.update( 
    { "_id": ObjectId("57a87614d03a435e4be44bb9"), "dummy.a": { $exists: true } }, 
    { $inc: { "dummy.$.a": 1 } } 
); 

festlegen müssen und dann wird es. erhöhen Sie a, wie Sie erwarten.

Mit Java MongoDB-Treiber wird es

sein
BasicDBObject query = new BasicDBObject(); 
query.put("_id", new ObjectId("57a87614d03a435e4be44bb9")); 
query.put("dummy.a", new BasicDBObject("$exists", true)); 
BasicDBObject incValue = new BasicDBObject("dummy.$.a", 1); 
BasicDBObject intModifier = new BasicDBObject("$inc", incValue); 
coll.update(query, intModifier, false, false, WriteConcern.SAFE); 

Tipps: bevor Sie Ihre Abfrage mit Java MongoDB-Treiber konstruieren zunächst versuchen, wenn es in Mongo Shell arbeitet.

+0

Vielen Dank. jetzt funktioniert es ...! –

+0

Ich habe noch einen Zweifel .. angenommen, Schlüssel ist nicht in Array vorhanden, dann möchte ich Schlüsselwert einfügen .. wenn Schlüssel vorhanden sind dann Wert erhöhen um 1 ... Zum Beispiel. Schlüssel "a" existiert, also werde ich Wert entsprechend Schlüssel a um 1 erhöhen. Fall zu Schlüssel "f" existiert nicht im Feld, also ich will in dummy Feld einfügen {f: 1} –

+0

Dieses ist ein anderes Problem, ich bin nicht sicher Sie kann es mit 1 Abfrage vervollständigen. Aktivieren Sie [hier] (http://stackoverflow.com/questions/38834181/mongodb-insert-document-or-crement-field-if-exists-in-array). Wenn eine Lösung mit zwei Abfragen (wobei die erste Abfrage das Dokument mit dem entsprechenden Schlüssel sucht und die zweite Abfrage Ihre Sammlung entsprechend dem ersten Ergebnis aktualisiert) für Sie funktioniert, aktualisieren Sie diese Frage oder erstellen Sie eine neue Abfrage. Ich werde deine Frage nicht zum dritten Mal bearbeiten, bitte, tu es selbst. – tarashypka

Verwandte Themen