小编典典

如何在 mongodb 中更新多个数组元素

all

我有一个包含元素数组的 Mongo 文档。

我想重置.handled数组中所有对象的属性 where .profile= XX.

文件格式如下:

{
    "_id": ObjectId("4d2d8deff4e6c1d71fc29a07"),
    "user_id": "714638ba-2e08-2168-2b99-00002f3d43c0",
    "events": [{
            "handled": 1,
            "profile": 10,
            "data": "....."
        } {
            "handled": 1,
            "profile": 10,
            "data": "....."
        } {
            "handled": 1,
            "profile": 20,
            "data": "....."
        }
        ...
    ]
}

所以,我尝试了以下方法:

.update({"events.profile":10},{$set:{"events.$.handled":0}},false,true)

然而,它只更新每个文档中 第一个 匹配的数组元素。(这是$ -
位置运算符
的定义行为。)

如何更新 所有 匹配的数组元素?


阅读 69

收藏
2022-06-10

共1个答案

小编典典

更新: 从 Mongo 3.6 版开始,此答案不再有效,因为上述问题已修复,并且有办法实现此目的。 请检查其他答案。


目前无法使用位置运算符更新数组中的所有项目。见 JIRA
http://jira.mongodb.org/browse/SERVER-1243

作为一种解决方法,您可以:

  • 单独更新每个项目(events.0.handled events.1.handled …)或…
  • 阅读文档,手动进行编辑并保存以替换旧文档(如果您想确保原子更新,请选中“如果当前更新” )
2022-06-10