聚合引言

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

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

聚合模式

  • 聚合管道

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

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

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

管道使用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的并行带来困难。

  • 单一目的的聚合操作

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

MongoDB 的聚集操作的更多相关文章

  1. 【翻译】MongoDB指南/CRUD操作(二)

    [原文地址]https://docs.mongodb.com/manual/ MongoDB CRUD操作(二) 主要内容: 更新文档,删除文档,批量写操作,SQL与MongoDB映射图,读隔离(读关 ...

  2. 【翻译】MongoDB指南/CRUD操作(一)

    [原文地址]https://docs.mongodb.com/manual/ MongoDB CRUD操作(一) 主要内容:CRUD操作简介,插入文档,查询文档. CRUD操作包括创建.读取.更新和删 ...

  3. MongoDB的CRUD操作

    1. 前言 在上一篇文章中,我们介绍了MongoDB.现在,我们来看下如何在MongoDB中进行常规的CRUD操作.毕竟,作为一个存储系统,它的基本功能就是对数据进行增删改查操作. MongoDB中的 ...

  4. MongoDB各种查询操作详解

    这篇文章主要介绍了MongoDB各种查询操作详解,包括比较查询.关联查询.数组查询等,需要的朋友可以参考下   一.find操作 MongoDB中使用find来进行查询,通过指定find的第一个参数可 ...

  5. mongodb的常用操作

    对于nosql之前工作中有用到bekerlydb,最近开始了解mongodb,先简单写下mongodb的一些常用操作,当是个总结: 1.mongodb使用数据库(database)和集合(collec ...

  6. MongoDB基本命令行操作

    1. 连接MongoDB: Mongodb://username:password@hostname/dbname 2. 创建数据库: use dbname:如果数据库不存在则创建数据库,否则切换到指 ...

  7. mongoDB之集合操作

    mongoDB之集合操作 mongoDB中的集合相当于mysql中的表. mongoDB中集合的创建: 第一种方式:不限制集合大小   db.createCollection("集合名称&q ...

  8. MongoDB数据库简单操作

    之前学过的有mysql数据库,现在我们学习一种非关系型数据库 一.简介 MongoDB是一款强大.灵活.且易于扩展的通用型数据库 MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数 ...

  9. Yii2的mongodb的聚合操作

    最近项目使用到mongodb的聚合操作,但是yii文档中对这方面资料较少,记录下 $where['created_time'] = ['$gt' => "$start_date_str ...

随机推荐

  1. 顺序栈操作--数据结构(C++)版

    最近学习数据结构,一开始接触感觉好难,颓废了一段时间,后来又重新翻开学习,突然感觉到很大的兴趣.对这些代码的运用都有了 一些新的认识.下面简单的讲述下最新学到的顺序栈,不知道大家学习的时候会不会有感觉 ...

  2. EntityFramework之多对多关系(四)

    上篇介绍了一对多关系,下面介绍下多对多关系代码编写. 1.新建model实体,User是用户类,Role是角色类,由于是多对多关系,必须得有一个中间类,所以产生了UserRole类 public cl ...

  3. J.U.C并发框架源码阅读(十六)FutureTask

    基于版本jdk1.7.0_80 java.util.concurrent.FutureTask 代码如下 /* * ORACLE PROPRIETARY/CONFIDENTIAL. Use is su ...

  4. Spring:基于配置文件的创建对象的各种方式

    在Spring3.0之前,Spring主要创建对象的方法是基于配置文件的,即在配置文件中为对象进行注册,并且可以在配置文件当中为对象的字段或者称之为属性值进行赋值,接下来首先介绍基于配置文件的创建对象 ...

  5. [Python Cookbook] Pandas: Indexing of DataFrame

    Selecting a Row df.loc[index] # if index is a string, add ' '; if index is a number, no ' ' or df.il ...

  6. uvalive4108(线段树)

    uvalive4108 题意 按顺序给出 n 个矩形,每给出一个矩形,统计它在多长的部分是最高的,并把这个长度称为该矩形的覆盖度,求最后总的覆盖度(每次得到的矩形的覆盖度之和) 分析 线段树.用两个数 ...

  7. 使用after伪类,配合IE的zoom或者overflow清除浮动

    用after伪类实现,兼容多种浏览器:.clearfix:after {content:"."; display:block; height:0; clear:both; visi ...

  8. Servlet 工作原理

    Servlet运行在Servlet容器中,由容器负责Servlet实例的查找及创建工作,并按照Servlet规范的规定调用Servlet的一组方法,这些方法也叫生命周期的方法.具体调用过程如下图所示: ...

  9. SQL 增删改查 复习

    首先创建两张表 CREATE TABLE Teacher ( Id ,) NOT NULL PRIMARY KEY, Name ) NOT NULL, ); CREATE TABLE Student ...

  10. SQL常用函数之五 str()

    原文:SQL常用函数之五 str() 使用str函数   :STR 函数由数字数据转换来的字符数据.   语法      STR    (    float_expression    [    ,  ...