Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MongoDB:更新数组中的特定元素_Mongodb_Mongodb Query_Aggregation Framework - Fatal编程技术网

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的元素解决方案中的
元素是什么?它是标识符名称,您可以重命名它