Ich bin ein MongoDB-Neuling und wollte fragen, wie man einen Update-Befehl mit Upsert und Liste schreiben.MongoDB - Upsert mit Listen
Grundsätzlich möchte ich so etwas wie dies zu tun:
{"_id" : ObjectId("4c28f62cbf8544c60506f11d"),
"some_other_data":"goes here",
"trips": [
{"name": "2010-05-10",
"loc": [{"lat":21.321231, "lng": 16.8783234, "updated_at": "Mon May 10 2010 15:24:35"},
{"lat":21.321231, "lng": 16.8783234, "updated_at": "Mon May 10 2010 15:24:24"}]
},
{"name": "2010-05-08",
"loc": [{"lat":21.324239, "lng": 16.8735234, "updated_at": "Mon May 8 2010 11:18:05"},
{"lat":21.311234, "lng": 16.8743271, "updated_at": "Mon May 8 2010 11:17:55"},
{"lat":21.321238, "lng": 16.8782219, "updated_at": "Mon May 8 2010 11:17:45"}]
}
]}
Beachten Sie, dass:
- Sie liefern einen Ausflug Namen und den aktuellen Standort
- Wird die Reise nicht bereits vorhanden ist, es muss erstellt werden
- trips.name sollte eindeutig sein, so dass wenn es exis ts, Sie an die Standort-Array
anhängen Dies ist die Abfrage, die ich schrieb die Positionsoperator mit $ push kombinieren.
db.mycollection.update({"application_id": "MyTestApp",
"trips.name": "2010-05-10"},
{$push: {'trips.$.loc': {"lat":11, "lng":11} }},
true);
Aber dies führt zu Daten wie folgt aus:
> db.mycollection.find({"application_id":"MyTestApp"})
{ "_id" : ObjectId("4c29044ebf8544c60506f11f"),
"application_id" : "MyTestApp",
"trips" : { "$" : { "loc" : [ { "lat" : 11, "lng" : 11 } ] },
"name" : "2010-05-10" }
}
Sie können sehen, dass
- "Reisen" ist kein Array
- es "$" wörtlich nahm und erstellt a Schlüssel damit (doh!)
Bisher war ich mit MongoDB ziemlich zufrieden, aber es gibt definitiv eine steile Lernkurve beim Schreiben komplizierter Abfragen.
Jede Rückmeldung wird geschätzt.
Vielen Dank im Voraus, Amie
überprüfen meine Antwort unten wieder - ich habe es bearbeitet zu schließen, was ich glaube, dass die Lösung (oder zumindest etwas, das Sie sehr nahe kommen sollte) – nearlymonolith
siehe dieses [SO Thread] (http://stackoverflow.com/questions/17994552/mongodb-update-documents-in-an-array/17995495#17995495). etwas ähnliches. – user10