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

时间:2019-02-26 09:42:39

标签: mongodb updates

我有一个收藏,其中包含以下文件:

{
  "_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的新手,到目前为止,谷歌搜索没有用。

1 个答案:

答案 0 :(得分:2)

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

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