我在集合中有以下项目:
{“_ 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}})
知道如何提出请求,以获得希望的结果吗?
答案 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投影操作符感兴趣。