2011-01-23 12 views
6

Tengo un documento de la siguiente forma:mongodb - doc crear si no existe, de lo empuje a la matriz

{ 
"_id" : ObjectId("4d2d8deff4e6c1d71fc29a07"), 
"user_id" : "714638ba-2e08-2168-2b99-00002f3d43c0", 
"events" : [ 
     { 
       "profile" : 10, 
       "data" : "....." 
     } 
     { 
       "profile" : 10, 
       "data" : "....." 
     } 
     { 
       "profile" : 20, 
       "data" : "....." 
     } 
     ... 
    ] 
} 

me gustaría tener algún tipo de upsert comunicado. Necesita agregar un event a la matriz events para user_id en caso de que ya exista dicho documento, de lo contrario, necesita crear el documento con el elemento event.

¿Se puede hacer eso?

Respuesta

13

Usted puede hacer upserts en Mongo, ver "Upserts con modificadores" de la Mongo doc:

Es posible utilizar upsert con un modificador operación. En tal caso, los modificadores se aplicarán al miembro de criterios de actualización y se insertará el objeto resultante .

La consulta que necesita se verá así:

db.events.update({ "user_id" : "714638ba-2e08-2168-2b99-00002f3d43c0" }, 
{ $push : { "events" : { "profile" : 10, "data" : "X"}}}, {"upsert" : true}); 
+1

Tal vez estoy usando una versión diferente, pero con sólo es cierto que el último parámetro de actualización no funciona. Tuve que poner {upsert: true} como argumento. –

+0

Tienes razón Artur. Actualizado. Gracias por anotar –

+0

@Javier Ferrero El ejemplo muestra solo $ push, ¿qué pasa si hay campos como user_type después de que user_id también tiene que actualizarse? –

Cuestiones relacionadas