MongoDB数据库学习-聚集。
聚集
聚集操作处理数据记录,并返回计算结果。聚集操作从多个文档一起对数据分组,然后对分组的数据执行一系列操作,返回一个结果。MongoDB提供了3种方法来执行聚集:聚集管道、map-reduce函数和单一目的聚集方法。
聚集管道
MongoDB的聚集框架建模于数据处理管道的概念之上。文档进入一个多阶段的管道,该管道把文档转换成一个聚集结果。
最基本的管道阶段提供了过滤器,类似查询操作和文档变换,修改输出文档的格式。
其它的管道操作提供了对文档按字段进行分组和排序的工具,也提供了对数组内容聚集的工具,包括文档数组。此外,管道步骤可以对任务使用操作符,例如计算平均值,或者连接字符串。
管道使用MongoDB原生的操作提供了有效的数据聚集功能,是MongoDB中优先选用的数据聚集方法。
聚集管道可以在分片集合上操作。
在某些步骤,聚集管道可以使用索引来提高性能。此外,聚集管道有一个内部优化阶段。详情请查看管道操作符与索引和聚集管道优化。
Map-Reduce
MongoDB也提供了map-reduce操作来执行聚集。一般,map-reduce操作有两个阶段:map阶段,处理每个文档,对每个输入文档输出1个或多个对象;和reduce阶段,把map操作的输出组合起来。可选地,map-reduce可以有一个最终阶段:对结果做最后的修改。像其它聚集操作一样,map-reduce可以指定一个查询条件来选择输入文档,也可以排序,对结果做限制。
Map-reduce使用自定义的Javascript函数来处理map和reduce操作,可选的最终阶段也是。与聚集管道相比,Javascript 提供了极大的灵活性,一般而言,map-reduce比聚集管道效率低一点,更复杂。
Map-reduce可以在分片集合上操作,也可以输出到一个分片集合。详情请查看聚集管道与分片集合和Map-Reduce与分片集合。
单一目的聚集操作
MongoDB也提供了db.collection.count(),db.collection.group(),db.collection.distince()等特殊目的的数据库命令。
所有这些操作都是从单个集合来聚集文档。但是这些操作只是提供了对常用聚集过程的简单方法,它们缺乏灵活性,功能也不如聚集管道和map-reduce。
其它特性和行为
关于聚集管道、map-reduce和特殊分组功能的特性比较,查看聚集命令比较。