我运行这个命令:
db.ads_view.aggregate({$ group:{_ id:"$ campaign","action":{$ sum:1}}});
ads_view:500 000个文件.
这个查询需要1.8s.这是它的简介:https://gist.github.com/afecec63a994f8f7fd8a
indexed:db.ads_view.ensureIndex({campaign:1});
但是mongodb不使用索引.任何人都知道是否可以聚合框架使用索引,如何索引此查询.
seb*_*ian 12
这是一个迟到的答案,但由于$group在 4.0 版的 Mongo 中仍然不会使用索引,因此它可能对其他人有帮助。
要显着加快聚合速度,请执行 a $sortbefore $group。
所以你的查询将变成:
db.ads_view.aggregate({$sort:{"campaign":1}},{$group: {_id : "$campaign", "action" : {$sum: 1} }});
这假设在 上campaign有一个索引,它应该是根据您的问题创建的。在 Mongo 4.0 中,使用db.ads_view.createIndex({campaign:1}).
我在包含 5.5+ Mio 的集合上对此进行了测试。文件。没有$sort,即使在几个小时后聚合也不会完成;使用$sortpreceeding $group,聚合需要几秒钟。
$group运营商不是目前使用索引的运营商之一.执行的操作符列表(从2.2开始)是:
$match
$sort
$limit
$skip
从这里:
http://docs.mongodb.org/manual/applications/aggregation/#pipeline-operators-and-indexes
根据要点中的产量数量,我假设你有一个非常活跃的实例,或者当你做这个组时,很多这些数据都不在内存中(它通常也会产生页面错误),因此1.8s
请注意,即使$group可以使用索引,并且您的索引涵盖了所有正在分组的内容,它仍然会涉及完整扫描索引以执行该组,并且无论如何都可能不会很快.
| 归档时间: | 
 | 
| 查看次数: | 3154 次 | 
| 最近记录: |