MongoDB聚合管道(Aggregation Pipeline)
参考聚合管道简介
聚合管道
聚合管道是基于数据处理管道模型的数据聚合框架。文档进入一个拥有多阶段(multi-stage)的管道,并被管道转换成一个聚合结果。最基本的管道阶段提供了跟查询操作类似的过滤和文档转换。其他管道操作提供了根据特殊字段对文档的分组和排序,以及对数组的聚合,包括文档数组。另外,管道阶段可以使用操作符来完成某些任务如计算平均值或者连接字符串。管道阶段可以在管道中出现多次。
如图所示,
聚合管道提供了一种map-reduce的替代方案,并且在map-reduce的复杂性无法保证的情况下,聚合管道可能是一个较好的解决方法。
聚合管道在值类型和结果大小上有一些限制,详细请参考聚合管道限制。
Map-Reduce
MongoDB也提供了map-reduce操作来进行聚合。总的来说,map-reduce操作有两个阶段(phase):map阶段处理每个文档并对每个文档产生一个或多个对象,而reduce阶段则合并map操作的结果。当然,map-reduce也可以有一个最终(finalize)阶段来对结果作一个最终修改,这是可选的。跟其他聚合操作类似,map-reduce可以指定查询条件来对输入文档进行选择,或者对输入文档排序和限制输出文档数量。
Map-reduce使用自定义的JavaScript函数来实现map和reduce操作,以及可选的finalize操作。与聚合管道相比,自定义JavaScript提供了很大的灵活性,所以map-reduce比聚合管道更加灵活,但没有后者效率高。
单一目的聚合操作
对一系列的常用单一目的聚合操作,MongoDB提供了用于专用目的的数据库命令。这些常用的聚合操作是:返回匹配的文档数量,返回某一字段的不相同的值,以及基于某个字段值的分组。所有这些操作从单一集合中聚合文档。这些操作可以实现常见聚合过程,但是它们缺乏灵活性,也不像聚合管道和map-reduce那样可以容纳很多操作阶段。
其他特征和行为
聚合管道和map-reduce都是在分片集合(sharded collection)上操作。Map-reduce操作也可以输入到一个分片集合中。参见聚合管道和分片集合与Map-Reduce和分片集合。
聚合管道在其中的某些阶段可以使用索引提高性能。另外,聚合管道有一个内部优化阶段。详情参见管道符和索引与聚合管道优化。
对聚合管道、map-reduce以及特殊分组功能的特性比较,参见聚合命令比较。
管道操作符的种类:
Name |
Description |
Reshapes a document stream. $project can rename, add, or remove fields as well as create computed values and sub-documents. |
|
Filters the document stream, and only allows matching documents to pass into the next pipeline stage.$match uses standard MongoDB queries. |
|
Restricts the number of documents in an aggregation pipeline. |
|
Skips over a specified number of documents from the pipeline and returns the rest. |
|
Takes an array of documents and returns them as a stream of documents. |
|
Groups documents together for the purpose of calculating aggregate values based on a collection of documents. |
|
Takes all input documents and returns them in a stream of sorted documents. |
|
Returns an ordered stream of documents based on proximity to a geospatial point. |
MongoDB聚合管道(Aggregation Pipeline)的更多相关文章
- MongoDB 聚合(管道与表达式)
MongoDB中聚合(aggregate)主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果.有点类似sql语句中的 count(*). aggregate() 方法 MongoDB中 ...
- MongoDB 聚合管道(Aggregation Pipeline)
管道概念 POSIX多线程的使用方式中, 有一种很重要的方式-----流水线(亦称为"管道")方式,"数据元素"流串行地被一组线程按顺序执行.它的使用架构可参考 ...
- MongoDB基础教程系列--第七篇 MongoDB 聚合管道
在讲解聚合管道(Aggregation Pipeline)之前,我们先介绍一下 MongoDB 的聚合功能,聚合操作主要用于对数据的批量处理,往往将记录按条件分组以后,然后再进行一系列操作,例如,求最 ...
- MongoDB聚合管道
通过上一篇文章中,认识了MongoDB中四个聚合操作,提供基本功能的count.distinct和group,还有可以提供强大功能的mapReduce. 在MongoDB的2.2版本以后,聚合框架中多 ...
- mongodb聚合管道用法
基本用法 db.collection.aggregate( [ { <stage> }, ... ] ) stage如下 名称 描述 $addFields 将新的字段添加到文档中,输出的文 ...
- MongoDB 聚合管道
参见:http://www.cnblogs.com/liruihuan/p/6686570.html MongoDB 的聚合功能,聚合操作主要用于对数据的批量处理,往往将记录按条件分组以后,然后再进 ...
- MongoDB 聚合管道(aggregate)
1.aggregate() 方法 我们先插入一些测试数据 { "_id" : ObjectId("5abc960c684781cda6d38027"), &qu ...
- 【mongoDB查询进阶】聚合管道(一) -- 初识
https://segmentfault.com/a/1190000010618355 前言:一般查询可以通过find方法,但如果是比较复杂的查询或者数据统计的话,find可能就无能为力了,这时也许你 ...
- 快速掌握mongoDB(二)——聚合管道和MapReduce
上一节简单介绍了一下mongoDB的增删改查操作,这一节将介绍其聚合操作.我们在使用mysql.sqlserver时经常会用到一些聚合函数,如sum/avg/max/min/count等,mongoD ...
随机推荐
- Logstash利用GeoIP库显示地图以及通过useragent显示浏览器(四)
我们通过Logstash收集的Nginx Access log中已经包含了客户端IP的数据(remote_addr),但是只有这个IP还不够,要在Kibana的显示请求来源的地理位置还需要借助GeoI ...
- C++类继承中,基类/当前对象属性/当前对象的构造顺序
[1]中提到,规范的派生类构造函数三个要点: 首先创建基类对象 应通过成员初始化列表,创建基类对象 应该初始化本派生类新增的成员变量 那在构造派生类实例的过程中,其基类(以及多继承的时候多个基类)/当 ...
- Xcode插件推荐
deriveddata-exterminator: A magic button in Xcode to exterminate the current project's DerivedData d ...
- 复习java7 集合的底层实现理解
1.ArrayList 特点:查询快,增删慢,可以重复,无序 实现:底层是用数组实现的,在添加数据的时候,当数组已经满了,会扩容,默认增加1.5倍的原数组长度,并将旧的数组数据拷贝到新的数组上. 2. ...
- laravel 添加第三方扩展库
确定需要安装的位置 common.php测试代码 打开cmd 跳转到项目根目录下运行命令 composer install 打开文件 vender/composer/autoload_classmap ...
- iOS Size Class使用
iOS8和iPhone6发布已经过去蛮久了,广大的果粉终于迎来了大屏iPhone,再也不用纠结为大屏买三星舍苹果了-但是对于iOS开发人员来说,迎来了和Android开发开发一样的问题->各种屏 ...
- Conversion to Dalvik format failed with error 1(android)
1.如果不修改android sdk版本,则使用project clean 命令作用于某工程即可. (该处理方式只是在高版本中兼容了低版本工程,未真正意义上的升级) 2.如果修改android sdk ...
- MVC 5 属性路由中添加自己的自定义约束
介绍约束 ASP.NET MVC和web api 同时支持简单和自定义约束,简单的约束看起来像: routes.MapRoute("blog", "{year}/{mon ...
- java中system.out.println()是什么意思
在Java编程中,我们常常用System.out.println()方法来输出字符串,也许我们都已经猜到println()是方法名,但System是什么,out又是什么呢?这里就涉及用到一个stati ...
- NDEF消息解析实例[转]
问题:按照NDEF消息格式来解析下列Hex串? D1 02 1F 53 70 91 01 0E 54 02 65 6E 68 65 6C 6C 6F 20 77 6F 72 6C 64 51 ...