2012-06-08 9 views
17

Mein Schema wie folgt aussieht:Entfernen eingebettetes Dokument in einem verschachtelten Array von Dokumenten

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

ich dieses Dokument mit abrufen kann:

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

Ich habe versucht, die folgend ein entfernen Dokument aus der Anlagensammlung mit der folgenden Zeile, aber ohne Erfolg:

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

Ich versuche, ein Objekt aus der entsprechenden assets Sammlung mit seiner ID zu entfernen. Irgendwelche Ideen?

Antwort

28

Sie sind so nah! Denken Sie daran, dass Ihr äußerster "Inhalt" ein Array selbst ist. Damit die folgende 2-Zeichen-Änderung funktioniert, verwenden Sie Inhalt. $. Vermögenswerte innerhalb des Wertes für $ pull.

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

Zoom voraus.

+0

Super! Vielen Dank! –

+1

Funktioniert nicht für mich in mongo 2.2.3 :(Tut einfach nichts. –

+0

Danke! Arbeit großartig! – juancancela

Verwandte Themen