【发布时间】:2019-11-14 09:20:30
【问题描述】:
我已经能够创建一个聚合查询来按我的数据对象的字段进行计数。
db.getCollection.aggregate([
{"$group" : {"_id": "$attr", "count": {"$sum" : 1}}},
{"$sort": {"count": -1}}
])
这导致基于{_id,count} 的文档按计数降序排序。到目前为止一切都很好。
我接下来要尝试的是filter 仅在(匹配)计数高于 N(比如 100)阈值的那些文档中。但是当我执行时:
db.getCollection.aggregate([
{"$group" : {"_id": "$attr", "count": {"$sum" : 1}}},
{"$sort": {"count": -1}},
{"$match": {"count": {$gte:["count",100]}}}
])
查询返回空结果。实现这一目标的方法是什么?我也尝试过使用$filter 而不是$match,但没有成功。
【问题讨论】:
-
请在 jsoneditor 分享收藏
-
@MaheshBhatnagar 在我看来并不真正需要,但为了测试,假设
[{"attr": "a"},{"attr": "b"},{"attr": "a"},{"attr": "c"}]现在我的最终查询的结果(阈值2)应该类似于[{"_id": "a","count":2}]. -
{"$match": {$gte:["$count",100]}} 必须完成这项工作
-
请注意,如果您之前确实有一些 SQL 经验,SQL to Aggregation Mapping Chart 有很多常见示例,包括“HAVING”子句,这基本上就是您要问的问题。
标签: mongodb filtering aggregate counting