【问题标题】:wanted to identify nested array value and replace it想要识别嵌套数组值并替换它
【发布时间】:2021-12-13 15:33:54
【问题描述】:
{
"_id": "100",
"menu": [
    {
        "type": "1",
        "isenabled": true,
        "items": [
            {
                "key": "activity",
                "enabled": true,
                "criteria": [
                    {
                        "key": "account",
                        "value": [
                            "active"
                        ],
                        "isExclude": false
                    }
                ],
                "eligible": [
                    "QA",
                    "DE"
                ],
                "isItem": false
            }
        ]
    }

}

我在一个集合中有以下类型的文档。 在这里,我想确定像活动这样的值,并将其替换为所有文档中的“非活动”。 我们如何才能一次在多个文档中做到这一点。

"value": [
          "active"
        ]

我尝试了一些东西,但它没有按预期工作。

db.getCollection('test').update({},
{
  $Set: {"menu.$[m].items.$[i].criteria.$[c].value":["inactive"]}
},
{
  arrayFilters: 
    [
    {
      "m.type":"1"
    },
    {
        "i.key": "activity"
    },
    {
        "c.key": "account"
    }
    ],
  multi: true
})

【问题讨论】:

    标签: arrays mongodb mongoose mongodb-query


    【解决方案1】:

    $set 不是$Set

    db.collection.update({},
    {
      $set: {
        "menu.$[m].items.$[i].criteria.$[c].value": [
          "inactive"
        ]
      }
    },
    {
      arrayFilters: [
        {
          "m.type": "1"
        },
        {
          "i.key": "activity"
        },
        {
          "c.key": "account"
        }
      ],
      multi: true
    })
    

    mongoplayground

    【讨论】:

    • 我的错。我已经改变并且它有效。但是我们如何才能仅在值仅“活动”的文档上进行此更改。 (因为我们也很少有其他值不需要更改)
    • 接受这个答案并将您的问题留在新问题中
    • 谢谢。我现在开始工作了。
    猜你喜欢
    • 2017-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-30
    • 2016-07-14
    • 2022-10-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多