MongoDB 通过条件聚合分组
Posted
技术标签:
【中文标题】MongoDB 通过条件聚合分组【英文标题】:MongoDB aggregate group by with condition 【发布时间】:2021-11-04 21:34:03 【问题描述】:示例文档
"user_id": "1",
"key": "key1",
"percent": 95
,
"user_id": "1",
"key": "key1",
"percent": 50
,
"user_id": "1",
"key": "key2",
"percent": 50
,
"user_id": "1",
"key": "key3",
"percent": 50
,
"user_id": "1",
"key": "key3",
"percent": 70
我想提取百分比小于 95 的文档。
当有多个文档具有特定键时,一个大于 95,一个小于 95,则不能显示具有该键的文档。 (上例中,key1对应。因为一个大于95,另一个小于95。)
如果所有多个文档的百分比都低于95,则必须提取百分比最高的文档。
我使用的当前查询
db.test.aggregate([
"$match":
"percent":
"$lte": 95
,
"user_id":
"$eq": user_id,
,
,
"$group":
"_id": "$key",
"max": "$max": "$percent"
,
"$project":
"_id": 1,
"percent": "$max"
,
])
结果
"key": "key1", "percent": 50
"key": "key2", "percent": 50
"key": "key3", "percent": 70
根据上述条件,key1
应从结果中排除,因为存在百分比为 95 或更高的文档。
预期结果
"key": "key2", "percent": 50
"key": "key3", "percent": 70
这个问题可以用MongoDB的查询解决吗?
谢谢!
【问题讨论】:
您可以尝试在分组之后(而不是之前)检查百分比匹配。 @prasad_ 正确!更改匹配查询的顺序后,它可以完美运行。谢谢:) 【参考方案1】:db.test.aggregate([
"$match":
"user_id":
"$eq": user_id,
,
,
"$group":
"_id": "$key",
"max": "$max": "$percent"
,
"$match":
"max":
"$lte": 95
,
"$project":
"_id": 1,
"percent": "$max"
,
])
更改匹配查询顺序后,完美运行。
【讨论】:
以上是关于MongoDB 通过条件聚合分组的主要内容,如果未能解决你的问题,请参考以下文章
MongoDB聚合使用表达式运算符(函数)分组按条件计数统计案例一则