参考聚合管道简介

聚合管道

聚合管道是基于数据处理管道模型的数据聚合框架。文档进入一个拥有多阶段(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

$project

Reshapes a document stream. $project can rename, add, or remove fields as well as create computed values and sub-documents.

$match

Filters the document stream, and only allows matching documents to pass into the next pipeline stage.$match uses standard MongoDB queries.

$limit

Restricts the number of documents in an aggregation pipeline.

$skip

Skips over a specified number of documents from the pipeline and returns the rest.

$unwind

Takes an array of documents and returns them as a stream of documents.

$group

Groups documents together for the purpose of calculating aggregate values based on a collection of documents.

$sort

Takes all input documents and returns them in a stream of sorted documents.

$geoNear

Returns an ordered stream of documents based on proximity to a geospatial point.

MongoDB聚合管道(Aggregation Pipeline)的更多相关文章

  1. MongoDB 聚合(管道与表达式)

    MongoDB中聚合(aggregate)主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果.有点类似sql语句中的 count(*). aggregate() 方法 MongoDB中 ...

  2. MongoDB 聚合管道(Aggregation Pipeline)

    管道概念 POSIX多线程的使用方式中, 有一种很重要的方式-----流水线(亦称为"管道")方式,"数据元素"流串行地被一组线程按顺序执行.它的使用架构可参考 ...

  3. MongoDB基础教程系列--第七篇 MongoDB 聚合管道

    在讲解聚合管道(Aggregation Pipeline)之前,我们先介绍一下 MongoDB 的聚合功能,聚合操作主要用于对数据的批量处理,往往将记录按条件分组以后,然后再进行一系列操作,例如,求最 ...

  4. MongoDB聚合管道

    通过上一篇文章中,认识了MongoDB中四个聚合操作,提供基本功能的count.distinct和group,还有可以提供强大功能的mapReduce. 在MongoDB的2.2版本以后,聚合框架中多 ...

  5. mongodb聚合管道用法

    基本用法 db.collection.aggregate( [ { <stage> }, ... ] ) stage如下 名称 描述 $addFields 将新的字段添加到文档中,输出的文 ...

  6. MongoDB 聚合管道

     参见:http://www.cnblogs.com/liruihuan/p/6686570.html MongoDB 的聚合功能,聚合操作主要用于对数据的批量处理,往往将记录按条件分组以后,然后再进 ...

  7. MongoDB 聚合管道(aggregate)

    1.aggregate() 方法 我们先插入一些测试数据 { "_id" : ObjectId("5abc960c684781cda6d38027"), &qu ...

  8. 【mongoDB查询进阶】聚合管道(一) -- 初识

    https://segmentfault.com/a/1190000010618355 前言:一般查询可以通过find方法,但如果是比较复杂的查询或者数据统计的话,find可能就无能为力了,这时也许你 ...

  9. 快速掌握mongoDB(二)——聚合管道和MapReduce

    上一节简单介绍了一下mongoDB的增删改查操作,这一节将介绍其聚合操作.我们在使用mysql.sqlserver时经常会用到一些聚合函数,如sum/avg/max/min/count等,mongoD ...

随机推荐

  1. web前端入门

    看到很多同学在咨询:学习前端该怎么入门啊.推荐一下前端入门书籍啊什么的,作为一个过来人,我想告诉你一些小小技巧,避免走弯路: 1.先敲再学.如果你是零基础,就不要去每个标签,每个属性地去抠,因为里面有 ...

  2. Python基础知识学习_Day5

    一.生成器和迭代器 1.列表生成 >>> a [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] >>> a = map(lambda x:x+1, a ...

  3. android 音频播放总结 soundlPool,MediaPlay

    soundlPool 用于小音频的播放多个同时播放. 使用步骤: 步骤一: 首先下载音频文件可以将其放入assets文件夹下或者res下的raw文件夹下,区别在于assets下可以再新建文件夹二raw ...

  4. Scala减少代码重复

    高阶函数可以把其它函数当作函数参数,帮助我们减少代码重复,例如: object FileMatcher { private def fileHere = (new File(".\\file ...

  5. JQuery-常用小组件

    常用的小组件记录 1. 单选框.复选框重置样式效果 参考: http://www.cnblogs.com/sanshi/p/4369375.html 三生石上 参考: http://www.jq22. ...

  6. IIS 和 各个协议

    1,IIS是Internet information service是internet信息服务的简写,它支持三大服务器,WWW,FTP,SMTP(简单Mail传输协议): 2,NNTP(网络新闻传输协 ...

  7. vultr优惠码ssd vps赠送50美金,长期有效

    vultr最新优惠码.vultr vps注册教程,是大家关心的问题.网上流传很多vultr vps优惠码,鱼龙混杂,难以判断.其实,获取vultr优惠赠送美元的方式很简单. 第一种,新用户使用绑定信用 ...

  8. Unity属性(Attributes)

    Unity3d中的属性(Attributes) Attributes属性属于U3D的RunTimeClass,所以加上以下的命名空间是必须的了. using UnityEngine; using Sy ...

  9. mac xcode 快捷键

    shift + cmd + n     新建项目 cmd + n             新建文件 视图 option + cmd + 回车 打开助理编辑器 cmd + 回车           显示 ...

  10. view 上推效果

    http://www.cocoachina.com/ios/20160307/15586.html