2013-03-07 11 views
5

三重ネストされた配列から属性を削除しようとしていますが、成功しません。ここで私は削除したいデータの例です。MongoDb:ネストされた配列からアトリビュートを解除する方法は?

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

] 

私は、次の更新クエリを試みたが、それらのどれも働いた:

  • 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);)

ただし、db.Page.find('Controls.Submit.Executes.Type': { $exists : true } }) iを実行するとtはType属性を持つすべてのExecuteを返します。

これを達成できますか?ありがとう!ネストされた配列の

+0

あなた 'Executes'はオブジェクトではなく、配列のようです。 – madhead

+0

あなたは正しく私はそれを誤って...今すぐ見てください! – faloi

答えて

4

クエリと更新がない(まだ)のMongoDBによってサポートは、これはクライアント側で行う必要があり、コマンドを直接:

はのJiraにこの問題を参照してください書き換え

  • 更新文書を、

    あなたの例を考えると、これは次のようになります。

    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}}); 
    }); 
    

    と結果は次のとおりです。

    > db.xx.findOne() 
    { 
        "Controls" : [ 
         { 
          "Name" : "ControlNumberOne", 
          "Submit" : { 
           "Executes" : [ 
            { 
             "Name" : "execute" 
            }, 
            { 
             "Name" : "anotherExecute" 
            } 
           ] 
          } 
         }, 
         { 
          "Name" : "ControlNumberTwo", 
          "Submit" : { 
           "Executes" : [ 
            { 
             "Name" : "anotherFromAnotherControl" 
            } 
           ] 
          } 
         } 
        ], 
        "_id" : ObjectId("5159ff312ee0f7d445b03f32") 
    } 
    
  • 関連する問題