Arrays 阵列的匹配聚合未按预期工作Mongodb

Arrays 阵列的匹配聚合未按预期工作Mongodb,arrays,mongodb,aggregation-framework,Arrays,Mongodb,Aggregation Framework,我想找到输入参数之间存在的所有记录。 如果我传递的from和to参数相同,那么它应该找到一个完全匹配的参数 我有以下疑问: db.runCommand( { aggregate: "mycoll", pipeline: [ { "$match": {"NUM": {$gte: 25, $lte:25 } } } ] } ) 收集数据: {"_id" : "1","NUM" : [21,24] } {"_id" :

我想找到输入参数之间存在的所有记录。 如果我传递的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
以上查询的输出:

{"_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
的项,这就是得到整个数组的原因。要修复此问题,您需要操作员:

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

@KamleshKanazariya请看这里: