【问题标题】: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
}

根据我在文档中看到的内容,这应该可以工作...

感谢您的任何见解!

【问题讨论】:

    标签: node.js mongodb express mongoose mongodb-query


    【解决方案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
    • 感谢史蒂夫的帮助。我最终按照您的建议将联系人拆分为单独的文档。
    • 没问题。很高兴你把它整理好了。
    • 嘿史蒂夫,如果你有机会,我有一个相关的问题......有点。 stackoverflow.com/questions/46348270/…。如果你有机会......
    猜你喜欢
    • 1970-01-01
    • 2013-02-02
    • 2016-07-14
    • 2018-05-14
    • 1970-01-01
    • 1970-01-01
    • 2020-10-18
    相关资源
    最近更新 更多