MongoDB:在Array中查找符合多个条件的2个值的文档

时间:2015-02-26 15:30:57

标签: arrays mongodb mongodb-query

假设我们有文件:

{_id : 1, arr : [5,50]}
{_id : 2, arr : [11,53]}

目标是找到在数组中有2个值的文档,一个必须在范围内(4,9),第二个在范围内(45,55)。 在这种情况下,只应返回带有_id:1的文档。

试过这个: db.Collection.find({arr : {$elemMatch : {$gte : 4, $lte : 9}}}) - 返回第一个文档 db.Collection.find({arr : {$elemMatch : {$gte : 45, $lte : 55}}}) - 返回

如何将这些标准组合在一起?

db.Collection.find({arr : {$and : [{$elemMatch : {$gte : 4, $lte : 9}}, {$elemMatch : {$gte : 45, $lte : 55}}]}}) 

返回:错误:{" $ err" :"无效的运算符:$和","代码" :10068}

1 个答案:

答案 0 :(得分:3)

你有正确的想法,但$and需要处于条件对象的顶层:

db.Collection.find({$and: [
    {arr: {$elemMatch: {$gte: 4, $lte: 9}}},
    {arr: {$elemMatch: {$gte: 45, $lte: 55}}}
]})

如果您还想确保这些是两个元素,那么您可以在$and数组中添加另一个术语来检查:

db.Collection.find({$and: [
    {arr: {$elemMatch: {$gte: 4, $lte: 9}}},
    {arr: {$elemMatch: {$gte: 45, $lte: 55}}},
    {'arr.2': {$exists: false}}
]})