使用 MongoDB 上的数组类型更新 属性 中的项目

Update items in a property with array type on MongoDB

我有一个包含以下文件的集合:

{
  "_id": "Mongo ObjectID",
  "some_prop": "some_value",
  "features": [
    { "name": "A", "icon": "01.png" },
    { "name": "B", "icon": "02.png" }
  ]
}

另一个文档示例:

{
  "_id": "Mongo ObjectID",
  "some_prop": "other one",
  "features": [
    { "name": "B", "icon": "02.png" },
    { "name": "C", "icon": "03.png" },
    { "name": "D", "icon": "04.png" }
  ]
}

请注意,在第一个文档和第二个文档中有相同的特征 B。这在很多文档中都会出现。

我需要的是将所有功能 B 更新为新图标,如下所示:

{ "name": "B", "icon": "10.png" }

我需要对具有名为 B 的功能的所有文档应用此更改。

我已经做了一个非常可怕的代码来获取所有文档并在循环中一个一个地更新。但我猜是否有更好的方法来做到这一点,也许在一个 collection.update 命令中?我是 MongoDB 的新人,到目前为止谷歌搜索没有用。

您需要使用$positional operator更新数组中的字段

db.collection.updateMany(
  { "features.name": "B" },
  { "$set": { "features.$.icon": "10.png" }}
)