使用猫鼬更新多个文档不起作用

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/…。如果你有机会......

以上是关于使用猫鼬更新多个文档不起作用的主要内容,如果未能解决你的问题,请参考以下文章

猫鼬 findByIdAndUpdate 不起作用

猫鼬 findByIdAndUpdate 不起作用

猫鼬 findByIdAndUpdate 不起作用。 new: true 包括

猫鼬中的保存功能不起作用

猫鼬:中间件预删除一个选项不起作用

猫鼬 TTL partialFilterExpression 不起作用?