匹配数组的聚合未按预期工作 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

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

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

最新更新