使用 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
保留在先前函数的结果集中,还是返回到整个表扫描(我很确定,或者希望不是这样)