【问题标题】:update the nested array in mongodb using node js使用节点 js 更新 mongodb 中的嵌套数组
【发布时间】:2021-07-27 13:18:37
【问题描述】:

我需要更新 mongoDB 中嵌套数组的特定元素

我的 mongoDB 数据如下所示。我需要匹配值 accessid 和 name 来更新状态。输入内容有

{"accessid" : 1627047023995, "name" : Name 09, "status" : 100 }

输入的内容可能属于任意level

  {
        "_id" : ObjectId("60fac46ffcbf5287248460a9"), 
        "levelone" : [ 
            {
                "level" : [ 
                    {
                        "name" : "Name 01",
                        "status" : 5
                    }, 
                    {
                        "name" : "Name 02",
                        "status" : 0
                    }, 
                    {
                        "name" : "Name 03",
                        "status" : 0
                    } 
                ], 
                "accessid" : "1627047023995" 
            }, 
            {
                "level" : [ 
                    {
                        "name" : "Name 09",
                        "status" : 5
                    }, 
                    {
                        "name" : "Name 15",
                        "status" : 3
                    } 
                ], 
                "accessid" : "1627047023995" 
            }
        ],
        "createdAt" : ISODate("2021-07-23T13:30:23.995Z") 
    }

我已尝试更新状态,但它仅更新第一个索引值 - 名称:名称 01 状态。请指导解决问题。

collections.updateOne({
  'levelone.level.accessid': accessid,
  'levelone.level.name': name
}, { '$set': { 'levelone.$.level.status': status } }).exec();

【问题讨论】:

    标签: node.js mongodb


    【解决方案1】:

    你可以使用arrayFilters位置更新,

    • 查询$elemMatch 过滤主文档
    • arrayFilters 为accessid 定义a 变量,为name 定义b
    await collections.updateOne({
      levelone: {
        $elemMatch: {
          accessid: accessid,
          "level.name": name
        }
      }
    },
    {
      $set: {
        "levelone.$[a].level.$[b].status": status
      }
    },
    {
      arrayFilters: [
        { "a.accessid": accessid },
        { "b.name": name }
      ]
    })
    

    Playground

    【讨论】:

    • 完美,我也在尝试使用 arrayfilters,效果很好。感谢支持
    猜你喜欢
    • 2022-06-13
    • 2018-10-22
    • 2021-07-30
    相关资源
    最近更新 更多