- 聚合 >
- 聚合简介
聚合简介¶
聚合 是泛指各种可以处理批量记录并返回计算结果的操作。MongoDB提供了丰富的聚合操作,用于对数据集执行计算操作。在 mongod 实例上执行聚合操作可以大大简化应用的代码,并降低对资源的消耗。
在MongoDB中,像查询之类的聚合操作都是使用 集合 中的文档作为输入,最终的结果会输出一个或者多个文档。
聚合方式¶
聚合管道¶
MongoDB 2.2 引入了一种新的基于数据处理管道概念的 聚合框架 。通过一个多阶段的管道,将一组文档转换为最终的聚合结果。
一个管道最基本的功能包含类似于查询的 过滤 功能,和可以修改输出结果的 文档转换 功能
其他的管道即可以根据指定的字段对文档进行排序和分组,也可以对文档内的数组内容或者一个文档数组进行聚合。另外,管道中的任务还可以使用像计算平均值和拼接字符串这样的 操作符 。
在MongoDB中推荐使用管道来做聚合,是因为管道使用了MongoDB内置的原生操作,聚合效率非常高。
映射化简¶
MongoDB还提供了 映射化简 来做聚合。通常来说,映射化简包含了两个阶段:一个对输入文档逐条处理并 提交 一个或多个对象的 映射 阶段和一个对映射操作的输出做合并的 化简 阶段。映射化简还有一个可选择的 完成 阶段,这个阶段可以对化简阶段的结果做修改。和其他的聚合类似,映射化简可以指定查询条件来选择输入的文档,并可以对输入文档做排序和限定输入个数。
映射化简使用普通的JavaScript函数来执行映射操作、化简操作、和可选的 完成 操作。一般来说,与聚合管道相比,JavaScript函数的优点是灵活,缺点在于效率稍低并且复杂一些。
注解
从MongoDB 2.4开始,某些 mongo 脚本函数和特性已经不能通过映射化简操作来访问了。MongoDB 2.4开始支持同一个时间运行多个JavaScript操作。在MongoDB 2.4以前,JavaScript代码是在单个线程中运行,多线程并发执行映射化简时会出问题。