mongodb $lte 和 $gte 的 $and 操作未按预期的整数值工作

mongodb $and Operation for $lte and $gte not working as expected for Integer value

我创建了以下聚合管道,它根据某些过滤器从两个集合中获取数据。主要的 table 是分配:

    {
   "aggregate":"Allocation",
   "pipeline":[
      {
         "$match":{
            "$and":[
               {
                  "allocPush.weekNum":{
                     "$gte":202109
                  }
               },
               {
                  "allocPush.weekNum":{
                     "$lte":202114
                  }
               },
               {
                  "statusCode":{
                     "$in":[
                        "C",
                        "L"
                     ]
                  }
               }
            ]
         }
      },
      {
         "$lookup":{
            "from":"Drug",
            "localField":"articleId",
            "foreignField":"_id",
            "as":"drugData"
         }
      },
      {
         "$unwind":"$drugData"
      },
      {
         "$sort":{
            "articleId":1,
            "sapStoreNum":1,
            "batchNum":1,
            "allocPush.weekNum":1
         }
      }
   ]
}

在我的分配集合中,我有一个名为 allocPush 的嵌入式文档,它是一个对象列表。

我有一个分配文档,其中包含两个 allocPush 文档,如下所示:

一个的 weekNum 值为 202107,另一个 202117

在我的聚合管道中,我有一个 $and 条件来验证它需要获取 allocPush.weekNum 值在 202109[ 之间的文档=43=] 和 202114

但此聚合仍获取具有 allocPush.weekNum 值 202107202117 的记录(两者都不在 202109 之间& 202114)

当我将两个 allocPush 文档的 weekNum 值更改为 202107 或两者都更改为 202117 时,它不会获取记录

不确定为什么会这样?

这是 $elemMatch 的工作。

这些查询条件

               {
                  "allocPush.weekNum":{
                     "$gte":202109
                  }
               },
               {
                  "allocPush.weekNum":{
                     "$lte":202114
                  }
               }]

应用于整个文档。由于文档包含一个大于 202109allocPush.weekNum 并且文档还包含一个小于 202114 的文档,因此整个文档满足这两个条件。

您可能想检查的是数组的单个元素是否介于这两个值之间。 $elemMatch 允许您指定数组的单个元素必须满足的条件才能使文档匹配。

这可能看起来像:

{
    "allocPush": {
        "$elemMatch":{
            "weekNum":{
                "$gte":202109, 
                "$lte":202114
            }
         }
     }
}