我有一个使用Mongoose的Node / Express API,我正在尝试更新多个文档中的子文档。
基本上,我的用户的个人资料中包含多个电话号码,可以与其他联系人共享。
每个联系人都有一个profile.contacts []部分,其中包含profile.contacts.phones []部分。
当主要用户与其他用户分享他/她的电话号码时,我想更新所有文件中的profile.contacts.phones []部分,其中该电话号码的_id匹配。
这是我的代码:
Profile.update({'contacts.phones._id':req.body._id}, {
Profile.contacts.phones.phone_number:req,body.phone_number,
Profile.contacts.phones.phone_type:req.body.phone_type
}, {multi:true}, function(err, result){
if(err)
res.send(err)
res.json(result);
})
以下是“个人资料”文档示例:
{
"_id" : ObjectId("59c09dca981de33d180df943"),
"last_name" : "Sam",
"first_name" : "Sam",
"owner_id" : "59c09dca981de33d180df940",
"contacts" : [
{
"first_name" : "Joe",
"last_name" : "Public",
"_id" : ObjectId("59c09dca981de33d180df944"),
"phones" : [
{
"phone_number" : "2067155803",
"phone_type" : "home",
"_id" : ObjectId("59bca0b55481370985cac29a")
}
]
}
]
"__v" : 0
}
根据我在文档中看到的内容,这应该有用......
感谢您的任何见解!!
答案 0 :(得分:1)
我认为您需要使用位置运算符来更新与查询匹配的数组 $ 中的对象。
但是,这不能用于嵌套数组:
位置$运算符不能用于遍历多个数组的查询,例如遍历嵌套在其他数组中的数组的查询,因为$ placeholder的替换是单个值。
https://docs.mongodb.com/manual/reference/operator/update/positional/
您可能需要考虑重组文档。