2016-07-18 14 views
0

ドキュメントと埋め込みアレイ要素の両方をこのドキュメントから1つのクエリで更新できますか?MongoDB - 埋め込みドキュメントとドキュメント自体の更新

など。

Team: 
{ 
    MembersCount: 1, 
    Members: [ 
     { 
     Id: 1, 
     Role: 1 
     }] 
} 

サンプルクエリはincrement MemberCountpush an element to Members arraychange the first member's roleする必要があります。

私の研究では、ドキュメントまたは特定の要素のいずれかを指し示す必要があるため、ドキュメントまたは更新配列の要素を更新できますが、両方を更新することはできませんが、

EDIT: ここで、Scores配列に要素を追加し、同じ配列内の他の要素を変更することは不可能であることがわかりました(この要素のインデックスが変更されます - これは私の説明です)。

+0

私の個人的な経験から、配列とそのオブジェクトプロパティを同時に更新することはできません。したがって、上記の結果に対して2つのクエリを使用する必要があります。 – rroxysam

答えて

0

見つかったように、同時に要素を更新している間は配列に追加できません。 MongoDB V3.2では、エラーメッセージが表示されるはずです。

Cannot update 'Members.0.Role' and 'Members' at the same time 

別のアプローチは、cursor.forEach()を利用することです。たとえば :

/* Find a document using _id */ 
db.collection.find({ 
        "_id":ObjectId("578cda18006d485d118c3b79") 
        }) 
        .forEach(function(doc){ 
           /* Increment MemberCount */ 
           doc['MemberCount']+=1; 
           /* Push an element to Members array */ 
           doc["Members"].push({"Id":2, "Role":9}); 
           /* Change the first member's role */ 
           doc["Members"][0]["Role"] = 3; 
           /* Save*/ 
           db.collection.save(doc) 
           }) 

あなたはこのアプリケーションのユースケースのためにdata model最も適しているかどうかを再検討する必要がありますが。

関連する問題