MongoDB带条件的aggregate分组查询如何过滤不符合规则的key
可以实现,你现有查询的问题出在第一步就过滤掉了percent≥95的文档,导致分组统计时无法识别某个key是否曾经出现过符合排除规则的数值。
调整思路
- 先保留所有对应用户ID的文档,不提前过滤percent数值
- 按key分组时,同时计算两个指标:该key下的percent最大值、该key是否存在≥95的percent记录
- 过滤掉存在≥95记录的key
- 最后格式化输出字段即可
调整后的查询语句
db.test.aggregate([ // 先过滤对应用户的所有文档,不提前筛percent { "$match": { "user_id": user_id } }, // 按key分组,统计所需指标 { "$group": { "_id": "$key", "max_percent": {"$max": "$percent"}, // 标记是否存在>=95的percent记录 "has_high_value": {"$max": {"$gte": ["$percent", 95]}} } }, // 过滤掉存在高值的key { "$match": { "has_high_value": false } }, // 格式化输出字段 { "$project": { "_id": 0, "key": "$_id", "percent": "$max_percent" } } ])
运行结果
执行上述语句后即可得到预期输出:
{"key": "key2", "percent": 50} {"key": "key3", "percent": 70}
内容的提问来源于stack exchange,提问作者Hide
相关产品推荐
相关产品推荐

