首页 > 解决方案 > 如何更新嵌套数组 mongodb 中的值?

问题描述

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

[{
  "_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 }
)

提前致谢

标签: arraysmongodbmultidimensional-arraymongodb-query

解决方案


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

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

操场


推荐阅读