MongoDB官方文档翻译--聚合

聚合(Aggregation)

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

聚合管道

聚合管道是基于数据处理流水线概念建模的数据聚合框架。 文档进入多阶段管道,将文档转换为聚合结果。聚合管道可以最sharded collection进行操作。管道示例如下图所示:


image.png

聚合管道提供了map-reduce的替代方案,并且可能是聚合任务的首选解决方案,其中map-reduce的复杂性可能是无法预估的。

在MongoDB中, aggregate 命令会把整个集合中的文档传入聚合管道。如有需要,可以使用下面的策略来优化这个操作,避免扫描整个集合。

  • 管道操作符合索引

  • sort管道运算符可以在管道开头出现时利用索引

  • *新版功能: *管道操作符 geoNear 时,一定让要 $geoNear 操作作为聚合管道的第一步来执行。

  • 预先过滤

  • 如果可能,将$ match运算符放在管道的开头。

管道阶段支持的操作: Stage Operator

聚合管道的限制

  • 结果集大小限制:16M

  • 内存限制:100M(allowDiskUse**** option突破内存限制

聚合管道的优化

http://www.mongoing.com/docs/core/aggregation-pipeline-optimization.html

要查看优化程序如何转换特定聚合管道,请在db.collection.aggregate()方法中包含explain 选项。

预测优化:聚合管道可以检测到是否仅使用文档中的一部分字段就可以完成聚合。如果是的话,管道就可以仅使用这些必要的字段,从而减少进入管道的数据量。、

聚合管道和分片集合

聚合管道支持在 分片 集合执行

http://www.mongoing.com/docs/core/aggregation-pipeline-sharded-collections.html

Map-Reduce

单用途聚合方法

MongoDB提供两种方法:db.collection.count() and db.collection.distinct().

二、运算符(Operators)

2.1、聚合管道运算符

阶段运算符

在db.collection.aggregate方法中,管道阶段组成一个数组, 文档按顺序通过各个阶段。

db.collection.aggregate( [ {< stage> }, ... ] )

三、运算符详细介绍

1、管道聚合运算符

geoNear

定义

输出离指点距离从从近到远的排序文档, geoNear选项的文档, 以与处理文档坐标系相同的单位指定所有距离:

{ $geoNear: { } }

使用说明

当使用$geoNear的时候,需要考虑以下几点

  • 只能使用$geoNear作为管道的第一个阶段

  • 必须指定distanceField选项。用来在返回的文档中表示距离。

  • collection必须有空间索引:$geoNear要求集合最多只有一个2d索引和/或只有一个2dsphere索引。

  • 如果使用2dsphere索引,则必须指定spherical:true

  • 您无需指定文档中的哪个字段包含坐标对或点。 由于geoNear隐式使用索引字段。

示例参考官网

你可能感兴趣的:(MongoDB官方文档翻译--聚合)