Soy un novato de MongoDB y quería preguntar cómo escribir un comando de actualización que involucra upsert y list.MongoDB - upsert implica listas
Básicamente lo que quiero lograr algo como esto:
{"_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"}]
}
]}
Tenga en cuenta que:
- proporciona un nombre de viaje y la ubicación actual
- Si el viaje no existe ya, es debe crearse
- viajes.nombre debe ser único para que si existe ts, se agrega a la matriz de ubicación
Esta es la consulta que escribí combinando el operador posicional con $ push.
db.mycollection.update({"application_id": "MyTestApp",
"trips.name": "2010-05-10"},
{$push: {'trips.$.loc': {"lat":11, "lng":11} }},
true);
Pero esto se traduce en datos de la siguiente manera:
> db.mycollection.find({"application_id":"MyTestApp"})
{ "_id" : ObjectId("4c29044ebf8544c60506f11f"),
"application_id" : "MyTestApp",
"trips" : { "$" : { "loc" : [ { "lat" : 11, "lng" : 11 } ] },
"name" : "2010-05-10" }
}
Se puede ver que
- "viajes" no es una matriz
- que tomó "$", literalmente, y creó una clave con eso (doh!)
Hasta ahora he estado muy contento con MongoDB, pero definitivamente hay una gran curva de aprendizaje con la escritura de consultas complicadas.
Cualquier comentario será apreciado.
Gracias de antemano, Amie
comprobar mi respuesta a continuación de nuevo - he editado para incluir lo que yo creo que es la solución (o al menos algo que debe llegar muy cerca) – nearlymonolith
vea esto [SO Thread] (http://stackoverflow.com/questions/17994552/mongodb-update-documents-in-an-array/17995495#17995495). algo similar a esto. – user10