欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

MongoDB的聚集操作

程序员文章站 2024-01-22 20:40:16
...

聚合引言 聚集操作就是出来数据记录并返回计算结果的操作。MongoDB提供了丰富的聚集操作,能够检测和执行数据集上的计算。运行在mongod上的数据聚集简化了代码和资源限制。 像查询一样,在Mongo的聚合操作使用collections作为输入,并返回一个或多个document

聚合引言

聚集操作就是出来数据记录并返回计算结果的操作。MongoDB提供了丰富的聚集操作,能够检测和执行数据集上的计算。运行在mongod上的数据聚集简化了代码和资源限制。

像查询一样,在Mongo的聚合操作使用collections作为输入,并返回一个或多个document作为输出。

聚合模式

聚合管道

MongoDB2.2引入了一个新的聚合框架:聚合管道,这是基于数据处理管道概念的模型。文档输入一个多阶段的管道并将文档转化为一个聚合的结果。

最基本的管道阶段提供了过滤器(Filters)来像查询一样操作,和文档转化(Document transformations)来修改输出文档的形式。

其他的管道提供了对特定字段分组和排序的工具,也有聚合数组内容的工具。并且,管道阶段能对任务使用操作符,比如计算平均值或连接一个字符串。

管道使用MongoDB原生的操作提供了有效的数据聚合,也是MongoDB里面一个理想的数据聚合方法。

MongoDB的聚集操作

上面带有注释的聚合操作管道操作,这个聚合管道有两个阶段: $match和$group

Map-Reduce

MongoDB也提供了map-reduce操作来执行聚合操作。一般的,map-reduce操作有两个阶段:Map阶段来处理每个文档并为每个输入文档输出一个或多个文档,Reduce阶段整合map操作的输出。Map-reduce有一个可选的finalize阶段,来为结果做最终的修改。和其他聚合操作一样,map-reduce指出了查询条件来选择输入文档并排序和限制结果。

Map-reduce使用自定义的javasript函数来执行map和reduce操作,以及可选的finalize操作。虽然自定义的javasript相对聚合管道提供了更大的灵活性,但一般map-reduce相对低效和复杂。

并且,map-reduce操作的输出集合比集合管道的输出极限大16M。

注:

从MongoDB2.4开始,特定的mongo shell函数和属性不能被map-reduce操作使用。MongoDB2.4也提供了同时执行多个Javascript操作的支持。在MongoDB2.4之前,javascript代码只能在单线程执行,这为map-reduce的并行带来困难。

MongoDB的聚集操作

单一目的的聚合操作

对很多的常规单一目的的聚合操作(single purpose aggregation operation),MongoDB提供了特殊目的的数据库命令。这些常规的聚合操作是:返回匹配文档的数量,返回一个字段的唯一的值,和基于一个字段值的分组。所有这些操作都是来自一个collection。虽然这些操作提供了简单的常规聚合操作处理方法,但他们都缺乏灵活性和像聚合管道、Map-reduce那样的能力。

MongoDB的聚集操作