如何只考虑数组中的第一个元素

时间:2013-05-29 13:11:37

标签: mongodb mongodb-query

我在集合中有以下项目:

  

{“_ id”:1,“vals”:[{a:1,b:2,c:0},{a:1,b:2,c:1},{a:1,b: 2,c:2}]}
  {“_ id”:2,“vals”:[{a:1,b:2,c:1},{a:1,b:2,c:2},{a:1,b:2,c :0}]}
  {“_ id”:3,“vals”:[{a:1,b:2,c:2},{a:1,b:2,c:0},{a:1,b:2,c :1}]}

我想找到所有带有(vals.c> 1)的项目,但只考虑数组中的第一个元素。
以正确的方式做到这一点我只得到项目:_id:2,_id:3在结果中。

采取以下查找请求,我得到所有项目。

  

db.items.find({vals:{$ elemMatch:{c:{$ gte:1}}},{“vals。$”:1}})

知道如何提出请求,以获得希望的结果吗?

1 个答案:

答案 0 :(得分:1)

也许令人惊讶的是,你可以这样做:

db.items.find({ 'vals.0.c': { $gte: 1 } })

您可以选择使用$ slice query-projection运算符仅返回查询结果中的zeroeth数组元素:

db.items.find({ 'vals.0.c': { $gte: 1 } }, {'vals': {'$slice': 1}})

请参阅$slice,您可能也对新的$elemMatch投影操作符感兴趣。