虚位以待(AD)
虚位以待(AD)
首页 > 数据库 > MongoDB数据库 > MongoDB数据库学习-聚集管道

MongoDB数据库学习-聚集管道
类别:MongoDB数据库   作者:码皇   来源:<a href="http://blog.csdn.net/chunyuan314" target="_blank" rel="nofollow   点击:

MongoDB数据库学习-聚集管道。

MongoDB数据库学习-聚集管道。

聚集管道

聚集管道是一个数据聚集框架,建模于数据处理管道的概念之上。文档进入一个多阶段的管道,被转换成聚集结果。
这里写图片描述
聚集管道提供了除map-reduce之外的可选方法,当map-reduce的复杂性没法保证时,可能还是聚集任务的优选方法。<喎"/kf/ware/vc/" target="_blank" class="keylink">vcD4NCjxwPr7bvK+53LXAttTWtcDg0M26zb3hufu089Ch09DQqc/e1saho7nY09q+27yvudy1wLXEz97WxrrN1LzK+LXEz+rH6aOsss6/vDxzdHJvbmc+vtu8r7nctcDP3tbGPC9zdHJvbmc+oaM8L3A+DQo8aDIgaWQ9"管道">管道

MongoDB聚集管道由阶段组成。当文档通过管道时,每个阶段对文档进行变换。管道阶段不一定要为每个输入文档产生一个输出文档,有些阶段可能产生新的文档,有的可能过滤掉文档。管道阶段可以在管道中出现多次。

MongoDB在mongoshell中对聚集管道提供了db.collection.aggregate()方法和aggregate命令。对于可用的阶段,查看管道操作符

管道表达式

有些管道阶段把管道表达式作为它的操作数。管道表达式指定了对输入文档应用的变换。管道表达式是一个文档结构,可以包含其它表达式。

管道表达式只能对管道中的当前文档操作,不能引用其它文档的数据:表达式操作提供了文档在内存中的变换。

一般而言,管道表达式是无状态的,只有当聚集过程看到时才会执行,只有一个另外:累计器表达式。

累计器,在$group阶段使用,当文档通过管道时保留了它们的状态(如总数、最大值、最小值,以及相关数据)。

3.2版本的改动:有些累计器也可以在$project阶段使用。当在$project阶段使用时,累计器不会保留它们的状态。

在MongoDB中,aggregate命令在单个文档上操作,逻辑上是把整个文档传进聚集管道。可以用如下策略来避免扫描整个集合,优化这个操作:

管道操作符与索引

$match和$sort管道操作符出现在管道的开始时,可以利用索引。

2.4版本新增:$geoNear管道操作服使用地理空间索引。当使用$geoNear时,它必须出现在聚集管道的第一个阶段。

3.2版本的改动:自MongoDB3.2版本开始,索引可以覆盖聚集管道。在MongoDB2.6和3.0,索引不能覆盖聚集管道,即使管道使用了索引,聚集仍然需要访问实际的文档。

及早过滤

如果聚集操作只需集合中的一个子集,可以使用$match、$limit和$skip阶段来限制进入管道开始的文档。当放在管道开始时,$match操作使用合适的索引来扫描集合中只匹配的文档。

在管道开始放一个$match阶段,然后在后面放一个$sort阶段,这等价于使用索引的单个查询操作。只要可能,就把$match操作符放在管道的开始。

其它特性

聚集管道有一个内部优化阶段,对某些操作符可以提高性能。详情见聚集管道优化

相关热词搜索: