2012-06-08 12 views
17

Mi esquema es el siguiente:Quitar documento incrustado en una matriz anidada de los documentos

"content" : [ 
     { 
      "_id" : ObjectId("4fc63de85b20fb72290000f8"), 
      "assets" : [ 
       { 
        "path" : "temp/4f840af9565832fa14000002/4f840b1e565832fa14000007/4fc63de85b20fb72290000f7/content/I_Understanding_and_Measuring.pdf", 
        "_id" : ObjectId("4fc63def5b20fb722900010e") 
       }, 
       { 
        "path" : "temp/4f840af9565832fa14000002/4f840b1e565832fa14000007/4fc63de85b20fb72290000f7/content/me.jpg", 
        "_id" : ObjectId("4fc63e4d5b20fb722900015d") 
       } 
      ], 
      "content" : "", 
      "name" : "Downloads" 
     }, 
     { 
      "_id" : ObjectId("4fc63dfd5b20fb722900012a"), 
      "assets" : [ 
       { 
        "path" : "temp/4f840af9565832fa14000002/4f840b1e565832fa14000007/4fc63de85b20fb72290000f7/content/me.jpg", 
        "_id" : ObjectId("4fc63e055b20fb7229000147") 
       }, 
       { 
        "path" : "temp/4f840af9565832fa14000002/4f840b1e565832fa14000007/4fc63de85b20fb72290000f7/content/thierry-henry-12-31-11-1.jpg", 
        "_id" : ObjectId("4fc63e525b20fb7229000164") 
       } 
      ], 
      "content" : "", 
      "name" : "Bio" 
     } 
    ], 

puedo recuperar este documento con:

db.presentations.find({'content.assets._id': ObjectId('4fc63def5b20fb722900010e')})` 

He intentado lo siguiente para eliminar una documento de la colección de activos con la línea siguiente, pero fue en vano:

db.presentations.update(
    {'content.assets._id': ObjectId('4fc63def5b20fb722900010e')}, 
    {$pull: {'content.assets': {'_id': ObjectId('4fc63def5b20fb722900010e')}}} 
) 

Estoy tratando de eliminar un elemento de la correspondiente colección assets por su id. ¿Algunas ideas?

Respuesta

28

¡Estás tan cerca! Recuerde que su "contenido" más externo es una matriz en sí misma. Por lo tanto, el siguiente cambio de 2 caracteres funciona, use el contenido . $. Assets dentro del valor de $ pull.

db.presentations.update(
    {'content.assets._id': ObjectId('4fc63def5b20fb722900010e')}, 
    {$pull: {'content.$.assets': {'_id': ObjectId('4fc63def5b20fb722900010e')}}} 
) 

Zoom ahead.

+0

¡Impresionante! ¡Gracias! –

+1

No funciona para mí en mongo 2.2.3 :(Simplemente no hace nada. –

+0

¡Gracias! ¡Funciona muy bien! – juancancela

Cuestiones relacionadas