我想查找输入参数之间存在的所有记录。 如果我以相同的方式从参数传递到参数,则应该找到完全匹配的内容。
我有以下查询:
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
答案 0 :(得分:1)
原因是您的条件将分别应用于数组。有一个大于25
的项目,也有一个小于25
的项目,这就是为什么要获得整个数组的原因。要解决此问题,您需要$elemMatch运算符:
{
"$match": {
NUM: {
$elemMatch: {
$gte: 25,
$lte: 25
}
}
}
}