我有以下文件:
"_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})
但是这些都不起作用。
我该如何实现?
答案 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
}
}
])