MongoDB如何返回数组中的多个数据

时间:2015-05-19 18:55:27

标签: mongodb find

我有一些像

这样的数据
{"name":[{"age":15},{"age":18},{"age":20}]}

我希望搜索年龄大于17,这是我的脚本

db.test.find({"name.age":{"$gt":17}},{"name.age.$":1})

这将返回

{"name":[{"age":18}]}

但我希望获得大于18的所有数据

如何改进脚本?

1 个答案:

答案 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"
                      ] 
            }

}
])