学习mongo系列(七)aggregate() ,$group() 管道
aggregate()聚合,主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果。有点类似sql语句中的 count(*)
接上边的数据库:
> db.user.aggregate([{$group:{_id:"name",num:{$sum:1}}}])
{ "_id" : "name", "num" : 6 }
> db.user.aggregate([{$group:{_id:"$name",num:{$sum:1}}}])
{ "_id" : "毛毛", "num" : 1 }
{ "_id" : "李四", "num" : 1 }
{ "_id" : "admin", "num" : 1 }
{ "_id" : "xiaoniao", "num" : 1 }
{ "_id" : "aaaaaaaaa", "num" : 1 }
{ "_id" : "张三", "num" : 1 }
以上实例类似sql语句: select name, count(*) from user group by name
在上面的例子中,我们通过字段by_user字段对数据进行分组,并计算by_user字段相同值的总和。
下表展示了一些聚合的表达式:
| 表达式 | 描述 | 实例 | 
|---|---|---|
| $sum | 计算总和。 | db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : "$likes"}}}]) | 
| $avg | 计算平均值 | db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$avg : "$likes"}}}]) | 
| $min | 获取集合中所有文档对应值得最小值。 | db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$min : "$likes"}}}]) | 
| $max | 获取集合中所有文档对应值得最大值。 | db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$max : "$likes"}}}]) | 
| $push | 在结果文档中插入值到一个数组中。 | db.mycol.aggregate([{$group : {_id : "$by_user", url : {$push: "$url"}}}]) | 
| $addToSet | 在结果文档中插入值到一个数组中,但不创建副本。 | db.mycol.aggregate([{$group : {_id : "$by_user", url : {$addToSet : "$url"}}}]) | 
| $first | 根据资源文档的排序获取第一个文档数据。 | db.mycol.aggregate([{$group : {_id : "$by_user", first_url : {$first : "$url"}}}]) | 
| $last | 根据资源文档的排序获取最后一个文档数据 | db.mycol.aggregate([{$group : {_id : "$by_user", last_url : {$last : "$url"}}}]) | 
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
管道的概念
管道在Unix和Linux中一般用于将当前命令的输出结果作为下一个命令的参数。
MongoDB的聚合管道将MongoDB文档在一个管道处理完毕后将结果传递给下一个管道处理。管道操作是可以重复的。
表达式:处理输入文档并输出。表达式是无状态的,只能用于计算当前聚合管道的文档,不能处理其它的文档。
这里我们介绍一下聚合框架中常用的几个操作:
- $project:修改输入文档的结构。可以用来重命名、增加或删除域,也可以用于创建计算结果以及嵌套文档。
 - $match:用于过滤数据,只输出符合条件的文档。$match使用MongoDB的标准查询操作。
 - $limit:用来限制MongoDB聚合管道返回的文档数。
 - $skip:在聚合管道中跳过指定数量的文档,并返回余下的文档。
 - $unwind:将文档中的某一个数组类型字段拆分成多条,每条包含数组中的一个值。
 - $group:将集合中的文档分组,可用于统计结果。
 - $sort:将输入文档排序后输出。
 - $geoNear:输出接近某一地理位置的有序文档。
 
学习mongo系列(七)aggregate() ,$group() 管道的更多相关文章
- 7.oracle学习门户系列七---网络管理和配置
		
oracle学习门户系列七 网络管理和配置 们学习了模式和用户.包含模式定义以及模式的作用. 这篇我么来看下ORACLE数据库中的网络管理和配置.只是这篇好像和上篇没有继承啊.这怎么看? Ok,事实上 ...
 - 学习mongo系列(八)密码与权限
		
一.设置密码及用户角色[1] > db.createUser(... {... user: "maxh",... pwd: "123",... roles ...
 - 学习mongo系列(六)limit(munber),skip(number)
		
> db.user.find().pretty(){ "_id" : ObjectId("56946fba3a18f4867aecbcd1"), &quo ...
 - 学习mongo系列(四)  find().pretty() remove() 查询
		
一.find() 方法以非结构化的方式来显示所有文档.如果你需要以易读的方式来读取数据,可以使用 pretty() 方法,语法格式如下:db.collection_name.find().pretty ...
 - 学习mongo系列(一)  win/mac安装  解析 连接
		
一.安装mongo数据库 下载链接https://www.mongodb.org/downloads, 在执行如下命令的时候事先按照目录新建如下的目录:(如果数据库安装在D盘就在D盘的根目录下建)&q ...
 - Dubbo源码学习总结系列七---注册中心
		
Dubbo注册中心是框架的核心模块,提供了服务注册发现(包括服务提供者.消费者.路由策略.覆盖规则)的功能,该功能集中体现了服务治理的特性.该模块结合Cluster模块实现了集群服务.Dubbo管理控 ...
 - 学习mongo系列(十一)关系
		
准备工作:首先在maxh数据库的address集合中先插入数据 > db.address.insert({child_address:"gansu"}) WriteResul ...
 - 学习mongo系列(十)MongoDB 备份(mongodump)与恢复(mongorerstore)  监控(mongostat  mongotop)
		
一.备份 在Mongodb中我们使用mongodump命令来备份MongoDB数据.该命令可以导出所有数据到指定目录中. mongodump命令可以通过参数指定导出的数据量级转存的服务器. mongo ...
 - 学习mongo系列(九)索引,聚合,复制(副本集),分片
		
一.索引 二.聚合 三.复制(副本集) 四.分片 尚未实践操作. 详见http://www.runoob.com/mongodb/mongodb-indexing.html
 
随机推荐
- Pinyin 输入法安装   opensuse 13 gnome
			
1 安装 拼音输入法 zypper in pinyin (scim 包含) 2 安装包 scim,scim-m17n,scim-pinyin,scim-qtimm,scim-tables,s ...
 - UINavigationBar 总结
			
一.某个 ViewController 出现隐藏 NavigationBar - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear ...
 - 【五子棋AI循序渐进】——多线程搜索
			
关于多线程搜索,有很多方法来实现,很多文章推荐基于MTD(F)的方式.好处不言而喻,不过我的程序中采用的是基于PVS的多线程搜索.实现起来主要是这几个方面问题需要解决: 1.置换表的互斥访问. 2.局 ...
 - php闭包实现函数的自调用,也是递归
			
php的闭包可能不常用,但是在某些场合之下还是可以考虑用php的闭包来实现某些功能的,比如递归,这里讲一下用php的闭包实现递归 //php闭包实现函数的自调用,也就是实现递归 function cl ...
 - C语言 str2bin 和 bin2str 实现
			
需求介绍 在编码或者调试过程中经常需要进行 字节码转换为 十六进制的字符串, 或者将 十六进制字符串 转换为 字节码的需求. 即: 字节码 (内存中存储的 01 串): 11111111 &l ...
 - Salesforce select字段的多少对性能影响巨大
			
Salesforce select字段的多少对性能影响巨大,第1个是select 144个字段,第2个是select 5个字段, 性能相差了7倍 "select Id,IsDeleted,M ...
 - http.Handler 与Go的错误处理
			
原文地址 在之前我写过一篇关于通过使用http.HandlerFunc来实现一个定制handler类型用来避免一些平常的错误的文章.func MyHandler(w http.ResponseW ...
 - Eclipse in Ubuntu16.04LTS Final Beta
			
#2016.03.30 在虚拟机Ubuntu16.04LTS上,用Eclipse编写运行Java,就目前而言,实在不是明智之举.卡顿极其厉害,还是在物理机上运行吧.那么继续Ubuntu的探索历程. 用 ...
 - 初试FitNesse
			
1.下载fitnesse-standalone.jar 2.在cmd中输入,开启fitnesse server 3.在浏览器中输入: 4.编写代码: package fitnesse.slim.tes ...
 - windows系统调用  调度优先级
			
#include "iostream" #include "windows.h" using namespace std; class CWorkerThrea ...