2013-05-29 50 views
1

我有一个集合中的follwing项目:如何考虑在阵列只是第一个元素

{ “_id”:1, “丘壑”:[{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, “:[{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在结果中。

以下follwing查找请求我得到的所有项目。

db.items.find({瓦尔斯:{$ elemMatch:{C:{$ GTE:1}}},{ “瓦尔斯$。”:1}})

任何想法如何提出请求,获得希望的结果?

回答

1

也许令人惊讶,你能做到像这样:

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

您可以选择在查询结果与$切片查询投影算只返回第零数组元素:

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

请参阅$slice,并且您可能还对新的$elemMatch投影算子感兴趣。

+0

是的!你是对的!直到昨天晚上,我在访问数组字段时不知道索引使用情况。感谢名单! – user1480734

+0

您是否通过purechange了解我如何通过匹配来减少结果集?在例子中,我得到了所有三个数组项。我尝试使用$(query)和$(projection)-operator,但不幸的是,然后不允许通过索引访问数组字段。 =( – user1480734

+0

编辑我的答案上面。 –

相关问题