MongoDB 的聚集操作
聚合引言
聚集操作就是出来数据记录并返回计算结果的操作。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 的聚集操作的更多相关文章
- 【翻译】MongoDB指南/CRUD操作(二)
[原文地址]https://docs.mongodb.com/manual/ MongoDB CRUD操作(二) 主要内容: 更新文档,删除文档,批量写操作,SQL与MongoDB映射图,读隔离(读关 ...
- 【翻译】MongoDB指南/CRUD操作(一)
[原文地址]https://docs.mongodb.com/manual/ MongoDB CRUD操作(一) 主要内容:CRUD操作简介,插入文档,查询文档. CRUD操作包括创建.读取.更新和删 ...
- MongoDB的CRUD操作
1. 前言 在上一篇文章中,我们介绍了MongoDB.现在,我们来看下如何在MongoDB中进行常规的CRUD操作.毕竟,作为一个存储系统,它的基本功能就是对数据进行增删改查操作. MongoDB中的 ...
- MongoDB各种查询操作详解
这篇文章主要介绍了MongoDB各种查询操作详解,包括比较查询.关联查询.数组查询等,需要的朋友可以参考下 一.find操作 MongoDB中使用find来进行查询,通过指定find的第一个参数可 ...
- mongodb的常用操作
对于nosql之前工作中有用到bekerlydb,最近开始了解mongodb,先简单写下mongodb的一些常用操作,当是个总结: 1.mongodb使用数据库(database)和集合(collec ...
- MongoDB基本命令行操作
1. 连接MongoDB: Mongodb://username:password@hostname/dbname 2. 创建数据库: use dbname:如果数据库不存在则创建数据库,否则切换到指 ...
- mongoDB之集合操作
mongoDB之集合操作 mongoDB中的集合相当于mysql中的表. mongoDB中集合的创建: 第一种方式:不限制集合大小 db.createCollection("集合名称&q ...
- MongoDB数据库简单操作
之前学过的有mysql数据库,现在我们学习一种非关系型数据库 一.简介 MongoDB是一款强大.灵活.且易于扩展的通用型数据库 MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数 ...
- Yii2的mongodb的聚合操作
最近项目使用到mongodb的聚合操作,但是yii文档中对这方面资料较少,记录下 $where['created_time'] = ['$gt' => "$start_date_str ...
随机推荐
- Tomcat服务器与HTTP协议
Tomcat服务器与HTTP协议 一. Tomcat服务器 1.tomcat服务器 1.web :网页,它代表的是网络上的资源.(java技术开发动态的web资源,即动态web页面,在Java中,动 ...
- 由"软件是干什么的"引发的思考
自工作以来,都只在进行模块的开发,很少站在整个项目的角度思考过.甚至,自己开发的软件,自己都没有去用过,包括开发的一些APP,都没有下载来认真体验过.思考过.却对自己手机上那些用过的A ...
- 模板—字符串—后缀自动机(后缀自动机+线段树合并求right集合)
模板—字符串—后缀自动机(后缀自动机+线段树合并求right集合) Code: #include <bits/stdc++.h> using namespace std; #define ...
- jcl sort comp3 to 表示型
Lets say your packed data is at 10th column and is of length 6, S9(4)V99 You could try the following ...
- lua取随机数
do local a = string.reverse(os.time()) print(a) math.randomseed(a) -- math.randomseed(os.time()) for ...
- Flash3D学习计划(四)——学习纹理相关知识,载入一张纹理,并应用于前面的矩形;并学习多层纹理映射相关知识,尝试dark map, glow map
实现效果 主要代码 package { import com.adobe.utils.AGALMiniAssembler; import com.adobe.utils.Perspective ...
- 如何在Blog中加入Google Analytics
原文链接:https://www.cnblogs.com/procoder/archive/2010/03/04/Google-Analytics-Blog.html 背景 在之前加入了一个网站统计工 ...
- 【安居客】资深PHP软件开发工程师
工作职责: 1.网站项目的开发和维护: 2.负责技术部软件开发架构设计: 3.负责生产环境.测试环境和生产环境服务器运维和优化: 4.负责研究较前沿和复杂的技术运用: 岗位要求: 1.熟悉 PHP 程 ...
- SQL SERVER 补丁查看
SELECT @@VERSION as 版本情况 SELECT SERVERPROPERTY('ProductVersion') as 产品版本编号, SERVERPROPERTY('Produc ...
- Tomcat服务器多域名配置(转载)
Tomcat服务器多域名配置 我们来讲解下如何在Tomcat服务器上进行多域名配置: 也就是一个Tomcat跑多网站,这里用真实案例举例,比如我这个云主机需要运行两个网站: pan.java1234. ...