我有一个收藏,其中包含以下文件:
{
"_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的新手,到目前为止,谷歌搜索没有用。
答案 0 :(得分:2)
您需要使用$
positional operator
更新数组中的字段
db.collection.updateMany(
{ "features.name": "B" },
{ "$set": { "features.$.icon": "10.png" }}
)