MongoDB - upsert envolvendo listas
Sou novato no MongoDB e queria perguntar como escrever um comando de atualização envolvendo upsert e list.
Basicamente, quero realizar algo assim:
{"_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"}]
}
]}
Observe que:
Você fornece um nome de viagem e a localização atualSe a viagem ainda não existe, ela precisa ser criadatrips.name deve ser exclusivo para que, se existir, você anexe à matriz de localizaçõesEsta é a consulta que escrevi combinando o operador posicional com $ push.
db.mycollection.update({"application_id": "MyTestApp",
"trips.name": "2010-05-10"},
{$push: {'trips.$.loc': {"lat":11, "lng":11} }},
true);
Mas isso resulta em dados como este:
> db.mycollection.find({"application_id":"MyTestApp"})
{ "_id" : ObjectId("4c29044ebf8544c60506f11f"),
"application_id" : "MyTestApp",
"trips" : { "$" : { "loc" : [ { "lat" : 11, "lng" : 11 } ] },
"name" : "2010-05-10" }
}
Você pode ver isso
"trips" não é uma matrizlevou "$10$quot; literalmente e criou uma chave com isso (doh!)Até agora, fiquei muito feliz com o MongoDB, mas há definitivamente uma curva acentuada de aprendizado ao escrever consultas complicadas.
Todos os comentários serão apreciados.
Agradecemos antecipadamente, Amie