以下是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" : "temp@gmail.com",
"email_type" : "Home",
"em_id" :1
},
{
"email_id" : "test@gmail.com",
"email_type" : "work",
"em_id" :2
}
],
"pb_name_prefix" : "MR."
}
]
}`
我希望mongodb查询能够根据email_id
更新pb_email_id
数组中的em_id
数据。如果我选择em_id=1
,那么该记录temp@gmail.com
将会更新。如果我选择em_id=2
,则test@gmail.com
将会更新。
答案 0 :(得分:0)
我认为你不能在更新调用中应用if-else逻辑,你可以运行两个单独的更新调用
db.collection.update({'pb_email_id.em_id':1},{$set : {'pb_email_id.$.email_id' : 'temp@gmail.com'}},{multi:true});
db.collection.update({'pb_email_id.em_id':2},{$set : {'pb_email_id.$.email_id' : 'test@gmail.com'}},{multi:true});
但是,您可以在集合上运行脚本以应用多个逻辑
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 = "temp@gmail.com"}
else if(doc.pb_email_id[i].em_id === 2){doc.pb_email_id[i].email_id = "test@gmail.com"}
db.collection.save(db)
}
}
})
如果你必须应用多个逻辑,你可以运行脚本,否则两个更新调用,如果需要那么多。
P.S - 由于你没有提到集合名称,我使用db.collection.update
它应该是集合名称,如db.phonebook.find
等。