【问题标题】:Mongoose add/remove items from nested arrayMongoose 从嵌套数组中添加/删除项目
【发布时间】:2022-02-06 08:09:37
【问题描述】:

我有一个包含嵌套数组的文档,我需要从中添加/删除项目。通常您通过 id 查询嵌套对象,但在这种情况下,动态对象 _id 不起作用,我需要通过嵌套配置文件 id 进行更新。

文档

{
    title: 'Title',
    members: [
      { 
          profile: { id: '123', name: 'Foo' },
          items: ['id1', 'id2', 'id3']
      }
    ]
}

查询

我的想法是我需要某种 $elemMatch 和 $pushAll 组合,但似乎无法让它发挥作用。为了从数组中删除项目,我会将 push 换成 pull

await this.repo.findByIdAndUpdate(id, {
    members: {
        $elemMatch: { 'profile.id': '123' },
        $pushAll: {
            items: ['xxx', 'yyy'],
        },
    },
})

【问题讨论】:

    标签: node.js mongodb mongoose nosql


    【解决方案1】:

    您需要使用 arrayFilters 和 $push 和 $each,因为 $pushAll 已被弃用

    db.collection.update({},
    {
     $push: {
       "members.$[x].items": {
         $each: [
           "xxx",
           "yyy"
         ]
       }
     }
    },
     {
      arrayFilters: [
        {
         "x.profile.id": "123"
        }
      ]
    })
    

    playground

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-03
      • 1970-01-01
      • 2017-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-21
      相关资源
      最近更新 更多