更新嵌套数组 mongodb

Update nested array mongodb

我想对 collection.
的所有文档的嵌套数组执行 updateMany() 操作 这是文档格式:

{
    "number": 1,
    "products": [{
        "name": "test",
        "compositions": ["water", "sugar"],
    }]
},
  {
    "number": 2,
    "products": [{
        "name": "test12",
        "compositions": ["cotton", "linen"],
    }]
}

如何通过执行 updateMany() 操作在嵌套在所有文档的产品数组中的 compositions 数组中添加元素(例如“颜色”)?

我试过了,但没用:

db.getSiblingDB("mydatabase").getCollection("stock").find().forEach(element => {
  element.products.forEach(product => {
    db.stock.updateOne(
      {$set: {
         'compositions': { $addToSet: { 'product.compositions' :  "color"}}
     }})  
  })
})

提前致谢。

您可以使用所有位置运算符$[]来更新数组中的所有元素。

db.getSiblingDB("mydatabase").getCollection("stock").updateMany(
  {},
  { $addToSet: { "products.$[].compositions": "color" } }
)

如果你不想更新所有元素,你可以使用 arrayFilters(它允许你在 option 部分使用 $[i] 符号):
mongodb example playground

db.getSiblingDB("mydatabase").getCollection("stock").updateMany(
  {},
  { $addToSet: { "products.$[i].compositions": "color" } },
  { arrayFilters: [{"i.name": "test12"}]
)