Aggregation

在本页面

聚合操作处理数据记录并返回计算结果。聚合操作将来自多个文档的值分组在一起,并且可以对分组的数据执行各种操作以返回单个结果。 MongoDB 提供了三种执行聚合的方式:aggregation pipelinemap-reduce function单一目的聚合方法

Aggregation Pipeline

MongoDB 的aggregation framework以数据处理管道的概念为模型。文档进入多阶段流水线,该流水线将文档转换成汇总结果。

最基本的管道阶段提供过滤器,其作用类似于查询,而文档转换,其修改输出文档的形式。

其他管道操作提供了用于按特定字段对文档进行分组和排序的工具,以及用于汇总数组(包括文档数组)内容的工具。另外,管道阶段可以使用operators来执行诸如计算平均值或连接字符串之类的任务。

管道使用 MongoDB 中的本机操作提供有效的数据聚合,并且是 MongoDB 中数据聚合的首选方法。

聚合管道可以在sharded collection上运行。

聚合管道可以在某些阶段使用索引来提高其性能。此外,聚合管道具有内部优化阶段。有关详情,请参见管道运算符和索引聚合管道优化

Map-Reduce

MongoDB 还提供map-reduce个操作来执行聚合。通常,map-reduce 操作有两个阶段:一个* map 阶段,处理每个文档并发出每个 Importing 文档的一个或多个对象;以及 reduce 阶段,合并了 map 操作的输出。可选地,map-reduce 可以具有 finalize *阶段以对结果进行最终修改。与其他聚合操作一样,map-reduce 可以指定查询条件以选择 Importing 文档以及对结果进行排序和限制。

Map-reduce 使用自定义 JavaScript 函数来执行 Map 和归约操作,以及可选的* finalize *操作。尽管自定义 JavaScript 与聚合流水线相比提供了极大的灵 Active,但总的来说,map-reduce 比聚合流水线的效率更低,更复杂。

Map-reduce 可以在sharded collection上进行操作。Map 减少操作也可以输出到分片集合。有关详情,请参见聚合管道和分片集合Map-Reduce 和分片集合

Note

从 MongoDB 2.4 开始,某些mongo shell 函数和属性在 map-reduce 操作中不可访问。 MongoDB 2.4 还支持同时运行多个 JavaScript 操作。在 MongoDB 2.4 之前,JavaScript 代码在单个线程中执行,从而导致了 Map-Reduce 的并发问题。

单一目的汇整作业

MongoDB 还提供db.collection.count()db.collection.distinct()

所有这些操作都汇总了单个集合中的文档。尽管这些操作提供了对常见聚合过程的简单访问,但是它们缺乏聚合管道和 Map 减少的灵 Active 和功能。

其他功能和行为

有关聚合管道,map-reduce 和特殊组功能的功能比较,请参阅聚合命令比较

首页