我有一个Mongo文档,它包含一个元素array.

我想重置数组中所有对象的.handled属性,其中.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": "....."
        }
        ...
    ]
}

因此,我try 了以下方法:

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

但是,它只更新每个文档中匹配的first个数组元素.(这是$ - the positional operator人的既定行为.)

如何更新all个匹配的数组元素?

推荐答案

UPDATE:


此时,无法使用"位置"操作符更新数组中的所有项.见JIRA http://jira.mongodb.org/browse/SERVER-1243

作为一项工作,你可以:

  • 分别更新每个项目
  • 阅读文档,进行编辑

Mongodb相关问答推荐

Mongoose聚合- $过滤器不删除匹配元素

如何拉平mongo DB中的对象并在根目录中保存时有条件地重命名字段?

如何在MongoDB中正确解析佛年?

查找/查找单个深度嵌套文档的多个集合

在出现错误时忽略mongodb事务回滚是好做法吗

MongoDB-如何过滤和获取数组字段中的最新数据

筛选出嵌套数组中的记录Mongo DB聚合

从具有多个数组匹配 MongoDB 的两个集合中采样数据

使用 mongo-driver/mongo 使用键/值对中的值表达式查找文档

@DynamicPropertySource 未被调用(Kotlin、Spring Boot 和 TestContainers)

如何修改 mongodb 中嵌套对象数组中的字段名称/键?

根据聚合管道MongoDB Atlas触发器中的条件更新多个字段

如何过滤查找mongodb的结果

有谁知道这个错误的修复方法(TypeError: Cannot assign to read only property ‘map’ of object '#')

如何构建我只需要打开一次 mongodb 连接的快速应用程序?

在 GridFS、express、mongoDB、node.js 中存储来自 POST 请求的数据流

为多个日期范围聚合 $group

MongoDB GridFS VS 直接磁盘 IO

如何从 node.js 以编程方式执行 mongodump 命令?

填充mongoose后查找