我有一些像
这样的数据{"name":[{"age":15},{"age":18},{"age":20}]}
我希望搜索年龄大于17,这是我的脚本
db.test.find({"name.age":{"$gt":17}},{"name.age.$":1})
这将返回
{"name":[{"age":18}]}
但我希望获得大于18的所有数据
如何改进脚本?
答案 0 :(得分:2)
这样做的一种方法是使用$redact运算符。
name
数组,符合我们的搜索条件。name
数组中匹配的子文档。片段:
var minimumAge = 17;
db.t.aggregate([
{$match:{"name.age":{$gt:minimumAge}}},
{$redact:{$cond:[
{$gt:[{$ifNull:["$age",minimumAge+1]},
minimumAge]},
"$$DESCEND",
"$$PRUNE"
]
}
}
])