MongoDB - Upsert mit Listen

Ich bin ein MongoDB-Neuling und wollte fragen, wie man einen Update-Befehl schreibt, der Upsert und List beinhaltet.

rundsätzlich möchte ich so etwas erreichen:

{"_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 geben einen Reise-Namen und den aktuellen Standort anWenn die Reise noch nicht existiert, muss sie erstellt werden trips.name sollte eindeutig sein, damit Sie, falls vorhanden, das Location-Array @ anhänge

Dies ist die Abfrage, die ich geschrieben habe, um den Positionsoperator mit $ push zu 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 folgenden Daten:

> 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, das

"trips" ist kein Arrayit nahm "!$10$!quot; wörtlich und erstellte damit einen Schlüssel (doh!)

Bisher war ich mit MongoDB ziemlich zufrieden, aber es gibt definitiv eine steile Lernkurve mit dem Schreiben komplizierter Abfragen.

Jede Rückmeldung wird gebeten.

anke im Voraus, Am

Antworten auf die Frage(4)

Ihre Antwort auf die Frage