使用猫鼬更新多个文档不起作用
Posted
技术标签:
【中文标题】使用猫鼬更新多个文档不起作用【英文标题】:Updating multiple documents with mongoose not working 【发布时间】:2018-02-28 14:23:18 【问题描述】:我有一个使用 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
根据我在文档中看到的内容,这应该可以工作...
感谢您的任何见解!
【问题讨论】:
【参考方案1】:我认为您需要使用位置运算符来更新数组 $ 中与查询匹配的对象。
但是,这不能用于嵌套数组:
位置 $ 运算符不能用于遍历多个数组的查询,例如遍历嵌套在其他数组中的数组的查询,因为 $ 占位符的替换是单个值。
https://docs.mongodb.com/manual/reference/operator/update/positional/
您可能不得不考虑重组您的文档。
【讨论】:
谢谢史蒂夫,但我收到以下错误:“无法使用部分(contacts.phones.phone_type)来遍历元素 contacts:[ first_name:"Joe", last_name :"公共", _id:ObjectId('59c09dca981de33d180df944') 电话:[ phone_number:"2067155803", phone_type:"home", _id:ObjectId('59bca0b55481370985cac29a') ] ] 我认为问题在于嵌套数组:contacts,然后是 phones。 感谢史蒂夫的帮助。我最终按照您的建议将联系人拆分为单独的文档。 没问题。很高兴你把它整理好了。 嘿史蒂夫,如果你有机会,我有一个相关的问题......有点。 ***.com/questions/46348270/…。如果你有机会......以上是关于使用猫鼬更新多个文档不起作用的主要内容,如果未能解决你的问题,请参考以下文章