arrays - 数组的匹配聚合未按预期工作 Mongodb
问题描述
我想找到输入参数之间存在的所有记录。如果我将 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
解决方案
原因是您的条件单独应用于数组。有一个大于25
,还有一个小于25
,这就是你得到整个数组的原因。要解决这个问题,您需要$elemMatch运算符:
{
"$match": {
NUM: {
$elemMatch: {
$gte: 25,
$lte: 25
}
}
}
}
推荐阅读
- sql - 未提供 SQL ODBC Sybase TO_DATE 过程
- .htaccess - 重定向到 https。与两个域冲突
- ansible - 引用 Ansible 库存层次结构
- python - 比较两个字典列表
- java - 分享时将标题文字加粗
- sql-update - 使用 Case When Exists 子句进行 Oracle 更新
- python - 保存和加载 ML 模型
- java - 在 Google App Engine 中部署 Spring Boot gradle 应用
- javafx - JavaFx - java.lang.IllegalArgumentException:无效的 URL 或找不到资源
- windows - Tor 配置文件位置 - Windows