2017-01-31 18 views
0

以下はMongoDB文書です。更新mongodbの配列要素を選択する根拠のネスト配列要素

`{ 
"_id" : ObjectId("588f09c8d466d7054114b456"), 
"phonebook" : [ 
    { 
     "pb_name_first" : "Aasu bhai", 
     "pb_phone_number" : [ 
      { 
       "ph_id" : 2, 
       "ph_no" : "+91111111", 
       "ph_type" : "Mobile" 
      } 
     ], 
     "pb_email_id" : [ 
      { 
       "email_id" : "[email protected]", 
       "email_type" : "Home", 
       "em_id" :1 
      }, 
      { 
       "email_id" : "[email protected]", 
       "email_type" : "work", 
       "em_id" :2 
      } 
     ], 
     "pb_name_prefix" : "MR." 
    } 
] 
}` 

私はem_idに基づいてpb_email_id配列のemail_idデータを更新するMongoDBのクエリをしたいです。私がem_id=1を選択した場合、そのレコード[email protected]は更新されます。em_id=2を選択すると、[email protected]が更新されます。私はあなたが更新通話中のif-elseロジックを適用することができるとは思わない

答えて

0

あなたは、複数のロジックに

db.collection.find({}).forEach(function(doc){ 
if(doc.pb_email_id && doc.pb_email_id.length>0){ 
    for(var i in doc.pb_email_id){ 
    if(doc.pb_email_id[i].em_id === 1){ 
     doc.pb_email_id[i].email_id = "[email protected]"} 
    else if(doc.pb_email_id[i].em_id === 2){doc.pb_email_id[i].email_id = "[email protected]"} 
    db.collection.save(db) 
    } 
    } 
}) 
を適用するには、コレクションにスクリプトを実行することができますただし、次の2回の別々の更新が

db.collection.update({'pb_email_id.em_id':1},{$set : {'pb_email_id.$.email_id' : '[email protected]'}},{multi:true}); 

db.collection.update({'pb_email_id.em_id':2},{$set : {'pb_email_id.$.email_id' : '[email protected]'}},{multi:true}); 

を呼び出して実行することができます

複数のロジックを適用する必要がある場合は、スクリプトを実行できます。そうでない場合は、必要に応じて2つの更新呼び出しが実行されます。

P.S - あなたは、コレクションの名前を言及しなかったので、私はdb.collection.updateを使用し、それはdb.phonebook.findなど

のように、コレクション名である必要があります
関連する問題