2013-03-07 24 views
5

Üçlü yuvalanmış bir diziden bir özniteliği başarılı olmadan kaldırmaya çalışıyorum. İşte kaldırmak istediğiniz veri bir örnektir: MongoDb: İç içe dizilerden özniteliği nasıl kaldırılır?

Controls: [ 
    {  
     Name: 'ControlNumberOne', 
     Submit: { 
      Executes: [ 
       { 
        Name: 'execute', 
        Type: 0 
       }, 
       { 
        Name: 'anotherExecute', 
        Type: 0 
       } 
      ] 
     } 
    }, 
    {  
     Name: 'ControlNumberTwo', 
     Submit: { 
      Executes: [ 
       { 
        Name: 'anotherFromAnotherControl', 
        Type: 1 
       } 
      ] 
     } 
    } 

] 

aşağıdaki güncelleştirme sorguları çalıştı ama bunların hiçbiri çalıştı:

  • db.Page.update('Controls.Submit.Executes.Type': { $exists : true } }, { $unset : { 'Controls.Submit.Executes.Type' : 1 } }, false, true);)

  • db.Page.update('Controls.Submit.Executes.Type': { $exists : true } }, { $unset : { 'Controls.$.Submit.Executes.$.Type' : 1 } }, false, true);)

Ancak, db.Page.find('Controls.Submit.Executes.Type': { $exists : true } }) çalıştırırsam t hala bir Type özniteliği olan tüm Executes'ları döndürür.

Bu başarılabilir mi? Teşekkürler! iç içe diziler

+0

Sizin 'Executes' bir nesne değil, bir dizi gibi görünüyor. – madhead

+0

haklısın, yanlış yazdım ... lütfen şimdi bir göz atın! – faloi

cevap

4

Sorgulama ve güncelleme değil (henüz) MongoDB tarafından desteklenen bu istemci tarafında yapılmalıdır doğrudan komutları:

yeniden belge, Jira bu sorunu bakın

db.xx.find(
    {'Controls.Submit.Executes.Type': { $exists : true } } 
).forEach(function(doc) { 
    doc.Controls.forEach(function(c) { 
     c.Submit.Executes.forEach(function(e) { 
      if (e.Type != undefined) delete e.Type;   
     }); 
    }); 
    db.xx.update({_id: doc._id},{$set:{Controls:doc.Controls}}); 
}); 

ve sonucudur:

seni örnek göz önüne alındığında, bu şu şekilde görünecektir

> db.xx.findOne() 
{ 
    "Controls" : [ 
     { 
      "Name" : "ControlNumberOne", 
      "Submit" : { 
       "Executes" : [ 
        { 
         "Name" : "execute" 
        }, 
        { 
         "Name" : "anotherExecute" 
        } 
       ] 
      } 
     }, 
     { 
      "Name" : "ControlNumberTwo", 
      "Submit" : { 
       "Executes" : [ 
        { 
         "Name" : "anotherFromAnotherControl" 
        } 
       ] 
      } 
     } 
    ], 
    "_id" : ObjectId("5159ff312ee0f7d445b03f32") 
}