Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mongodb$和$lte和$gte的操作未按整数值预期工作_Mongodb_Mongodb Query_Aggregation Framework_Mongotemplate - Fatal编程技术网

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

mongodb$和$lte和$gte的操作未按整数值预期工作,mongodb,mongodb-query,aggregation-framework,mongotemplate,Mongodb,Mongodb Query,Aggregation Framework,Mongotemplate,我创建了以下聚合管道,它根据特定的过滤器从两个集合中获取数据。正在分配的主表: { "aggregate":"Allocation", "pipeline":[ { "$match":{ "$and":[ { "allocPush.weekNum&q

我创建了以下聚合管道,它根据特定的过滤器从两个集合中获取数据。正在分配的主表:

    {
   "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文档,如下所示:

其中一个的周数值为202107,另一个的周数值为202117

在我的聚合管道中,我有一个$and条件,用于验证它需要获取具有allocPush.weekNum值介于202109202114之间的文档

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

当我将allocPush文档的weekNum值更改为just202107或同时更改为202117时,它不会获取该记录


不确定为什么会发生这种情况?

这是
$elemMatch
的作业

这些查询条件

               {
                  "allocPush.weekNum":{
                     "$gte":202109
                  }
               },
               {
                  "allocPush.weekNum":{
                     "$lte":202114
                  }
               }]
应用于整个文档。由于文档包含一个大于
202109
allocPush.weekNum
,并且文档还包含一个小于
202114
,因此文档整体满足这两个条件

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

这可能看起来像:

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

谢谢…这很好用