如何更新嵌套数组mongodb中的值?

时间:2021-08-02 00:36:22

标签: arrays mongodb multidimensional-array mongodb-query

我想更新我的集合中所有具有特定值的文档,这些值驻留在结构如下的嵌套数组中:

[{
  "_id": "1",
  "arrayX": [
    {
      "id2": "123", 
      "arrayY": [
        {
          "colour": "blue",
          "size": "small"
        },
        {
          "colour": "red",
          "size": "small"
        },
      ]
    },
    {
      "id2": "12345", 
      "arrayY": [
        {
          "colour": "blue",
          "size": "small"
        },
        {
          "colour": "purple",
          "size": "small"
        },
      ]
    }
  ]
}]

在这种情况下,我需要将上面示例中显示的 2 个元素中的值 "blue" 更新为 "white"

我想出了这样的东西,但它不起作用:

db.collection.update(
   { arrayX.$.arrayY.$.colour: "blue" },
   { $set: { "arrayX.$.arrayY.$.colour" : "white" } },
   { upsert: false }
)

提前致谢

1 个答案:

答案 0 :(得分:1)

尝试arrayFilters更新嵌套数组中的特定元素和$[]更新所有元素,

db.collection.updateMany(
  { "arrayX.arrayY.colour": "blue" },
  {
    $set: {
      "arrayX.$[].arrayY.$[c].colour": "white"
    }
  },
  {
    arrayFilters: [
      { "c.colour": "blue" }
    ]
  }
)

Playground