在mongodb中使用Node.js更新深度嵌套的数组

时间:2019-02-20 10:14:19

标签: node.js mongodb

我想为以下文档中的嵌套数组对象基于_id更新地址:

{
  "_id": "fb369348-341b-11e9-9e05-03b09392591c",
  "user": [
    {
      "_id": "fb369349-341b-11e9-9e05-03b09392591c",
      "name": "test1",
      "address": [
        {
          "_id": "fb369350-341b-11e9-9e05-03b09392591c",
          "loc1": "place1, chennai, India",
          "type": "home"
        },
        {
          "_id": "fb369351-341b-11e9-9e05-03b09392591c",
          "loc1": "palce2, chennai, India",
          "type": "work"
        }
      ]
    },
    {},
    {},
    {}
  ]
}

我在mongodb中使用以下查询,它的工作正常,并且记录正在更新:

db.user_details.update(
    { "user.address._id": 'fb369350-341b-11e9-9e05-03b09392591c' },
    { $set: { 
            "user.$.address.$[i].loc1": "11111111111",
            "user.$.address.$[i].type": "fdfdfddfdfdfdfdfdfdfdf" 
            } 
    },
    { arrayFilters: [{ "i._id": 'fb369350-341b-11e9-9e05-03b09392591c'}] }
)

但是当我尝试在节点js中使用以上查询时,出现错误:

  

TypeError:无法读取未定义的属性'castForQuery'

有人可以帮助我理解为什么我遇到castForQuery错误,_id是uuid并另存为字符串类型吗?

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题。就我而言,一切都正确,但我的猫鼬版本不合适。

我通过更新Mongoose版本解决了我的问题。以前我使用的是mongoose@5.0.15。通过以下命令,我升级了猫鼬版本。

npm install mongoose@5.5.11  

之后,它起作用了。