mongodb提供三种方式来实现聚合:聚合管道,map-reduce,及单一目的的聚合方法。
管道操作可以在分片的集合上运算,可以使用索引来提高效率,管道使用了mongodb内部的操作来进行高效数据聚合,是聚合操作的首选。
如果你的聚合操作只需要部分数据,使用
组合的优化,
https://docs.mongodb.com/manual/core/aggregation-pipeline-optimization/
一些限制:管道的stage使用100mb的内存,如果超过这个限制,那mongodb会抛出一个错误,为了允许超过这个限制,需要使用allowDiskUse选项,来将超出限制的数据放置到临时文件上。
结果集的大小:返回结果集的大小如果超过了BSON Document Size的话会报错。
map-reduce使用定制的js函数来进行map和reduce操作,方式相比较管道来说,相对效率不高但是更复杂。
单一目的的聚合方法:这种方式是操作在单个的集合上,相比较前2个方法来说,他们缺乏灵活性,大数据量时候也不如前2中方式。