MongoDB:更新数组中的特定元素
我有一份具有以下结构的文件:MongoDB:更新数组中的特定元素,mongodb,mongodb-query,aggregation-framework,Mongodb,Mongodb Query,Aggregation Framework,我有一份具有以下结构的文件: { _id: ObjectId(), "subjects": [ { "name": "math", "first_try": { "passed": true }, "second_try": { "passed": false },
{
_id: ObjectId(),
"subjects": [
{
"name": "math",
"first_try": {
"passed": true
},
"second_try": {
"passed": false
},
"third_try": {
"passed": false
},
"fourth_try": {
"passed": false
}
}
]
}
这里有几个这样的主题。
请不要建议更改数据结构等-这是一个为这个问题创建的假数据结构(不能共享原始名称,但结构相同)
对于每一个主题,我都有这4个键:“第一次尝试”、“第二次尝试”、“第四次尝试”。其中有些是“通过”,有些则不是
对于每个主题,如果没有其他通过的尝试,我想设置first\u try.passed:true
。如果例如third\u try.passed:true,我不应该更新first\u try
我试图继续使用一些aggregate
条件,包括elemMatch
,以查找要更新的项目,但它看起来很糟糕,没有像我预期的那样工作
是否可以使用单个updateMany
查询来处理此情况?您可以使用:
collection.updateName({},
{$set:{“subjects.$[element].first_try.passed:true},
{阵列过滤器:[{
“element.first_try.passed”:false,
“element.second_try.passed”:false,
“element.third_try.passed”:false,
“element.fourth_try.passed”:false}]})
第一次尝试
,第二次尝试
等。是对象还是数组?(您在示例中使用了括号,但它看起来像一个对象结构)@sachav是的,它们是对象。已编辑。因此,它只会更新所有这些情况都为false的元素,对吗?它只会更新所有*\u try.passed
为false的元素解决方案中的元素是什么?它是标识符名称,您可以重命名它