2012-06-08 19 views
17

mio schema è simile al seguente:Rimuovere documento incorporato in un array nidificato di documenti

"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" 
     } 
    ], 

posso recuperare questo documento con:

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

Ho provato quanto segue per rimuovere un documento dalla raccolta di beni con la riga sotto, ma senza successo:

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

Sto cercando di rimuovere un oggetto dalla corrispondente collezione assets tramite il suo id. Qualche idea?

risposta

28

Sei così vicino! Ricorda che il tuo "contenuto" più esterno è una matrice stessa. Quindi il seguente cambiamento di 2 caratteri funziona, usa il contenuto . $. Assets all'interno del valore per $ pull.

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

Zoom avanti.

+0

Fantastico! Grazie! –

+1

Non funziona per me in mongo 2.2.3 :(Non fa niente –

+0

Grazie! Ottimo lavoro! – juancancela

Problemi correlati