使用mongoose无法正常更新多个文档

时间:2017-09-19 17:30:36

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

我有一个使用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 个答案:

答案 0 :(得分:1)

我认为您需要使用位置运算符来更新与查询匹配的数组 $ 中的对象。

但是,这不能用于嵌套数组:

  

位置$运算符不能用于遍历多个数组的查询,例如遍历嵌套在其他数组中的数组的查询,因为$ placeholder的替换是单个值。

https://docs.mongodb.com/manual/reference/operator/update/positional/

您可能需要考虑重组文档。