首页 > 解决方案 > 数组的匹配聚合未按预期工作 Mongodb

问题描述

我想找到输入参数之间存在的所有记录。如果我将 from 和 to 参数都作为相同的参数传递,那么它应该找到一个完全匹配的。

我有以下查询:

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

标签: arraysmongodbaggregation-framework

解决方案


原因是您的条件单独应用于数组。有一个大于25,还有一个小于25,这就是你得到整个数组的原因。要解决这个问题,您需要$elemMatch运算符:

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

推荐阅读