Node.js 在mongoose不工作的情况下更新多个文档
我有一个使用Mongoose的Node/Express API,我正在尝试更新多个文档中的子文档 基本上,我有一个用户的个人资料中有多个电话号码,他们可以与其他联系人共享 每个联系人都有一个profile.contacts[]部分,该部分包含profile.contacts.phones[]部分 当与其他用户共享其电话号码的主用户更改其号码时,我想更新所有文档中的profile.contacts.phones[]部分,其中该电话号码的_id匹配 这是我的密码:Node.js 在mongoose不工作的情况下更新多个文档,node.js,mongodb,express,mongoose,mongodb-query,Node.js,Mongodb,Express,Mongoose,Mongodb Query,我有一个使用Mongoose的Node/Express API,我正在尝试更新多个文档中的子文档 基本上,我有一个用户的个人资料中有多个电话号码,他们可以与其他联系人共享 每个联系人都有一个profile.contacts[]部分,该部分包含profile.contacts.phones[]部分 当与其他用户共享其电话号码的主用户更改其号码时,我想更新所有文档中的profile.contacts.phones[]部分,其中该电话号码的_id匹配 这是我的密码: Profile.update(
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
}
根据我在文档中看到的,这应该是可行的
谢谢你的洞察力 我认为您需要使用位置操作符来更新与查询匹配的数组$中的对象 但是,这不能用于嵌套数组: 位置$operator不能用于遍历多个数组的查询,例如遍历嵌套在其他数组中的数组的查询,因为$placeholder的替换项是单个值
您可能需要考虑重构您的文档。
谢谢史提夫,但是我得到以下错误:“不能使用Couth.Cele.PosieType类型的联系人来遍历元素{Case:[{FistTyNoNe:乔”),LaSTiNeNe:“Pube”,YoID:ObjectId('59C09DCA981DE33 D180DF944)电话:[{phone_number:“2067155803”,phone_type:“home”,_id:ObjectId('59bca05481370985cac29a')}]}我认为问题在于嵌套数组:联系人,然后是电话。谢谢你的帮助Steve。我最终按照你的建议将联系人分成了一个单独的文档。没问题。很高兴你把它整理好了。嘿Steve,如果你有机会,我有一个相关的问题……有点……如果你有机会。。。