我有超过1,000,000条记录的MongoDB集合。 每个记录大小约为20K(因此总集合大小约为20GB)。
我有一个'类型'集合中的字段(可以有大约10个不同的值)。 我想获得该系列的per-type计数器。 此外,还有一个关于'类型'的索引。字段。
我测试了两种不同的方法(假设是python语法):
for type_val in my_db.my_colc.distinct('type'):
counters[type_val] = my_db.my_colc.find({'type' : type_val}).count()
counters = my_db.my_colc.aggregate([{'$group' : {'_id': '$type', 'agg_val': { '$sum': 1 } }}])
我收到的第一种方法的性能比第二种方法快2个数量级。 似乎与count只在索引上运行而不访问文档这一事实有关,而$ group必须逐个遍历文档。 (它约1分钟对45分钟。)
有没有办法在'类型'上运行有效的分组查询? index,只使用索引,从而实现#1的性能结果,但使用聚合框架?
我正在使用MongoDB 2.6.1
更新: https://jira.mongodb.org/browse/SERVER-11447在MongoDB Jira中就此问题开放。
答案 0 :(得分:1)
在聚合管道中,$ group子句不使用索引。它应该在$ match之后使用,它确实可以使用索引来加速它。
欢呼声,