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值介于202109和202114之间的文档
但此聚合仍然获取allocPush.weekNum值为202107和202117的记录(两者都不在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
}
}
}
}
谢谢…这很好用