子文档字典MongoDB中的查询值

时间:2019-05-16 09:29:33

标签: mongodb mongodb-query

我有以下文件:

"_id" : 19,
"name" : "Elizabeth Moore",
"achronym" : "EM19",
"calc" : {
    "20" : {
        "role" : 20,
        "score" : 15,
        "inRole" : false,
        "range" : {
            "int" : 80,
            "min" : 20
        }

我需要检索所有具有“ calc.inRole”为false的_id。

我尝试过:

db.coll.find({'calc.$.inRole': false})
db.coll.find({'calc.inRole': false})

但是这些都不起作用。

我该如何实现?

1 个答案:

答案 0 :(得分:0)

由于calc的字段具有未知的键,因此您需要运行$objectToArray将其转换为键和值的数组。然后,您可以在该阵列上运行$in。如果要将其作为单个管道步骤,则可以使用$let运算符定义临时变量:

db.collection.aggregate([
    {
        $match: {
            $expr:{ 
                $let: {
                    vars: {
                        arr: { $objectToArray: "$calc" }
                    },
                    in: {
                        $in: [ false, "$$arr.v.inRole" ]
                    }
                }
            }
        }
    },
    {
        $project: {
            _id: 1
        }
    }
])

Mongo Playground