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 ...
随机推荐
- mysql运维必会的一些知识点整理(转自民工哥)
(1)基础笔试命令考察 1.开启MySQL服务 /etc/init.d/mysqld start service mysqld start systemctl start mysqld 2.检测端口是 ...
- POJ 2524 Ubiquitous Religions (并查集)
Description 当今世界有很多不同的宗教,很难通晓他们.你有兴趣找出在你的大学里有多少种不同的宗教信仰.你知道在你的大学里有n个学生(0 < n <= 50000).你无法询问每个 ...
- ACM阶段总结(2016.10.07-2016.11.09)
来这里也有一段时间了…… 总感觉自己练得不是很有效. 最近的一些行动就是不断做比赛,然后不停地补,但是感觉这样像只无头苍蝇,没有效果,学不到什么真正的东西. 最近开始打算补专题,做做codeforce ...
- 模拟【p2239】 螺旋矩阵
顾z 你没有发现两个字里的blog都不一样嘛 qwq 题目描述--->p2239 螺旋矩阵 看到题,很明显,如果直接模拟的话,复杂度为\(O(n^2)\)过不去.(这个复杂度应该不正确,我不会分 ...
- kotlin扩展函数
kotlin 扩展函数 https://www.kotlincn.net/docs/reference/extensions.html 扩展函数在android中的应用 fun AppCompatAc ...
- JD
General Description: The role is responsible for China COE Operations Team’s data and cost analysis, ...
- H-Index II -- LeetCode
Given an array of citations (each citation is a non-negative integer) of a researcher, write a funct ...
- [POI2014]Cards
题目大意: 有$n(n\le2\times10^5)$张卡片排成一排,每张卡片正反面有两个数$a_i$和$b_i$.$m(m\le10^6)$次操作,每次交换第$c_i$和第$d_i$张卡片,问若可以 ...
- 十. 图形界面(GUI)设计2.框架窗口
窗口是GUI编程的基础,小应用程序或图形界面的应用程序的可视组件都放在窗口中,在GUI中,窗口是用户屏幕的一部分,起着在屏幕中一个小屏幕的作用.有以下三种窗口: Applet窗口:Applet类管理这 ...
- java拦截器与过滤器打印请求url与参数
HttpServletRequest httpServletRequest = (HttpServletRequest) request; HttpServletResponse httpServle ...