数组的匹配聚合未按预期工作

时间:2019-04-29 09:17:00

标签: arrays mongodb aggregation-framework

我想查找输入参数之间存在的所有记录。 如果我以相同的方式从参数传递到参数,则应该找到完全匹配的内容。

我有以下查询:

db.runCommand(
{
    aggregate: "mycoll",
    pipeline: [
        {
            "$match": {"NUM": {$gte: 25, $lte:25 } }
        }
    ]
}
)

收集数据:

{"_id" : "1","NUM" : [21,24] }
{"_id" : "2","NUM" : [25,29] }
{"_id" : "3","NUM" : [24,26,28] }

上述查询的输出:

{"_id" : "2","NUM" : [25,29] }
{"_id" : "3","NUM" : [24,26,28] }   //Why this record come No any 25 record exits

1 个答案:

答案 0 :(得分:1)

原因是您的条件将分别应用于数组。有一个大于25的项目,也有一个小于25的项目,这就是为什么要获得整个数组的原因。要解决此问题,您需要$elemMatch运算符:

{
    "$match": {
       NUM: {
          $elemMatch: {
              $gte: 25,
              $lte: 25
            }
        }
    }
}