Node.js 在mongoose不工作的情况下更新多个文档

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(

我有一个使用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
}
根据我在文档中看到的,这应该是可行的


谢谢你的洞察力

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

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

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


您可能需要考虑重构您的文档。

谢谢史提夫,但是我得到以下错误:“不能使用Couth.Cele.PosieType类型的联系人来遍历元素{Case:[{FistTyNoNe:乔”),LaSTiNeNe:“Pube”,YoID:ObjectId('59C09DCA981DE33 D180DF944)电话:[{phone_number:“2067155803”,phone_type:“home”,_id:ObjectId('59bca05481370985cac29a')}]}我认为问题在于嵌套数组:联系人,然后是电话。谢谢你的帮助Steve。我最终按照你的建议将联系人分成了一个单独的文档。没问题。很高兴你把它整理好了。嘿Steve,如果你有机会,我有一个相关的问题……有点……如果你有机会。。。