Sono un newbie MongoDB e volevo chiedere come scrivere un comando di aggiornamento che coinvolge upsert e list.MongoDB - upsert che coinvolge le liste
Fondamentalmente io voglio realizzare qualcosa di simile:
{"_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"}]
}
]}
Nota che:
- Si fornisce un nome viaggio e la posizione corrente
- Se il viaggio non esiste già, it deve essere creato
- trips.name deve essere univoco in modo che se è già ts, si aggiunge alla matrice posizione
Questa è la query che ho scritto che combina l'operatore posizionale con $ spinta.
db.mycollection.update({"application_id": "MyTestApp",
"trips.name": "2010-05-10"},
{$push: {'trips.$.loc': {"lat":11, "lng":11} }},
true);
Ma questo si traduce in dati come questo:
> db.mycollection.find({"application_id":"MyTestApp"})
{ "_id" : ObjectId("4c29044ebf8544c60506f11f"),
"application_id" : "MyTestApp",
"trips" : { "$" : { "loc" : [ { "lat" : 11, "lng" : 11 } ] },
"name" : "2010-05-10" }
}
si può vedere che
- "viaggi" non è una matrice
- ci sono voluti "$", letteralmente e ha creato una chiave con quello (doh!)
Finora sono stato abbastanza felice con MongoDB, ma c'è sicuramente una curva di apprendimento ripida con la scrittura di query complicate.
Qualsiasi feedback sarà apprezzato.
Grazie in anticipo, Amie
leggi la mia risposta qui sotto ancora una volta - ho modificato per includere quello che ritengo essere la soluzione (o almeno qualcosa che dovrebbe arrivare molto vicino) – nearlymonolith
vedere questo [Thread SO] (http://stackoverflow.com/questions/17994552/mongodb-update-documents-in-an-array/17995495#17995495). qualcosa di simile a questo. – user10