2016-07-04 24 views
1

MongoDB文書のすべての配列にオブジェクトを挿入する必要があります。下に表示されたitemsアレイはitemListです。すべてitemListitemSpecを挿入する必要があります。処理の後工程MongoDB配列要素にオブジェクトを挿入

{ 
    "items": [ 
    { 
     "itemList":{ 
     "rejected": true 
     }, 
     "fProcBy": "automatic" 
    }, 
    { 
     "itemList":{ 
     "rejected": true 
     }, 
     "fProcBy": "automatic" 
    } 
    ] 
} 

:前と処理後の所望の文書の形状を以下に示す

{ 
    "items": [ 
    { 
     "itemList":{ 
     "rejected": true 
     }, 
     "itemSpec":{ 
     "approved": true 
     }, 
     "fProcBy": "automatic" 
    }, 
    { 
     "itemList":{ 
     "rejected": true 
     }, 
     "itemSpec":{ 
     "approved": true 
     }, 
     "fProcBy": "automatic" 
    } 
    ] 
} 

だからitemsアレイの各要素における挿入がなければなりません新しいオブジェクトのプロパティitemSpec

答えて

1

$ pushオペレータを使用してドキュメント内の配列を更新します。

これを試してみてください。

db.test.update({"_id":"yourUniqueId"}, 
       {$push: { "items":{ "itemSpec":{"approved": true}}}}); 
+0

この項目の「要素」としてitemSpecが追加されます:あなたは、おそらく非常に高い(私はあなたのデータについての詳細な情報を持っていないとして、それはただの推測です)ではない、単一の文書、を持っている要素アレイ。 OPは、それは以下のように新しい配列要素を作成する代わりに、 – Newton

+0

実際の要素の内部にそれを追加したい、私は{ 「アイテム」上述したように更新しなければならない:[ { 「itemListの」:{ 「拒否」:真 } 、 "fProcBy": "自動" }、 { "itemListの":{ は "拒否":真 }、 "fProcBy": { "itemSpec"、} "自動":{ "承認済み」:true } } ] } –

+0

私はあなたが言いたいことを得ていませんでした!問題が何であるか教えてください。 –

2

を、私は、単一の実行でそれをしない解決策を認識していないけど、次の簡単なスクリプトを使用して、反復の最大数は、アレイの最大数に等しいです

var q = { "items.itemSpec": null }; 
var u = { 
    $set: { 
     "items.$.itemSpec" : { 
      "approved": true 
     } 
    } 
}; 
var yourColl = db.getCollection('fooBar'); 
while (yourColl.find(q).count() > 0) { 
    yourColl.update(q, u, { multi: true }); 
} 
関連する問題