使用MongoDB聚合框架显然$group
函数是瓶颈。通过在某些查找查询中使用explain()
,我可以定制索引以显着减少表扫描,但$group
似乎没有考虑发生的任何$sort
之前,即使我最终按字段进行排序,它最终也会执行$group
。
除了简单地减少结果集外,是否有任何实用的方法来改善$group
函数的性能?我几乎想要利用排序,只是在我自己的应用程序中执行$group
,但必须有一个优雅且高性能的解决方案使用该框架。
我注意到随着$match
的结果集增加,$group
时间也会增加。
我的文档基本上就是这样
{
a: (String)
b: (String)
}
pipeline
看起来像
$match :{ a : 'frank'}
$sort : { b : 1 }
$group : { _id : { $b : b }}
令我惊讶的是,因为我认为当它到达组时,数据被加载到内存中,并且由于字段被索引,因此几千条记录不需要花费那么多时间来加载进入记忆。情况不是这样吗?
似乎$sort
对整体效果没有影响。有没有办法使用索引,以及管道的先前功能来提高$group
的性能?此外,$group
是否保留在之前功能的结果集中,或者是否会返回整个表格扫描(我非常确定,或者希望不是这样)