MongoDB - upsert con listas

Soy un novato de MongoDB y quería preguntar cómo escribir un comando de actualización que incluya upsert y list.

Básicamente 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 actualSi el viaje aún no existe, debe crearsetrips.name debe ser único para que, si existe, se agregue a la matriz de ubicaciones

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 da como resultado datos como este:

> db.mycollection.find({"application_id":"MyTestApp"})          
{ "_id" : ObjectId("4c29044ebf8544c60506f11f"), 
"application_id" : "MyTestApp", 
"trips" : { "$" : { "loc" : [ { "lat" : 11, "lng" : 11 } ] }, 
"name" : "2010-05-10" } 
}

Puedes ver eso

"viajes" no es una matriztomó "$10$quot; literalmente y creó una clave con eso (¡doh!)

Hasta ahora he estado bastante contento con MongoDB, pero definitivamente hay una curva de aprendizaje abrupta al escribir consultas complicadas.

Cualquier comentario será apreciado.

Gracias de antemano, Amie

Respuestas a la pregunta(2)

Su respuesta a la pregunta