mongodb学习之:聚合

@font-face { font-family: "Times New Roman"; }@font-face { font-family: "宋体"; }p.MsoNormal { margin: 0pt 0pt 0.0001pt; text-align: justify; font-family: "Times New Roman"; font-size: 10.5pt; }p.p { margin: 5pt 0pt; text-align: left; font-family: "Times New Roman"; font-size: 12pt; }span.msoIns { text-decoration: underline; color: blue; }span.msoDel { text-decoration: line-through; color: red; }div.Section0 { }

Mongodb除了基本的查询功能,还提供了强大的聚合工具。这一章来看下如何使用聚合进行查询

count:

count是最基本的聚合工具,返回集合中的文档数量:

> db.student_infor.count()

10

还可以设置条件进行查询

> db.student_infor.count({"age":{$gt:19}})

6

distinct:

distinct用来找出制定键的所有不同的值,在使用的时候必须指定集合和键

distinct对应的就是集合名字,key对应的是键。输出结果是student_infor中的age所有的值

> db.runCommand({"distinct":"student_infor","key":"age"})

{ "values" : [ 21, 19, 20, 22, 18 ], "ok" : 1 }

group:

Group大约需要一下几个参数。

1.key:用来分组文档的字段。和keyf两者必须有一个
 2.keyf:可以接受一个javascript函数。用来动态的确定分组文档的字段。和key两者必须有一个
 3.initial:reduce中使用变量的初始化
 4.reduce:执行的reduce函数。函数需要返回值。
 5.cond:执行过滤的条件。
 6.finallize:在reduce执行完成,结果集返回之前对结果集最终执行的函数。可选的。

来看一个具体的例子:

>db.student_infor.group({"key":{age:true},"initial":{num:0},$reduce:function(doc,prev){prev.num++}})

key:age代表用age来做分组。指定为true那么相同的age将会被分成一组。

initial是指定了一个初始的值,将会在reduce中使用

reduce:每个文档都对应一次这个调用,系统传递两个参数:当前文档和累加器文档。doc代表当前正在迭代的文档,prev就是累加器文档,用来进行各种统计的累加。prev中用到的num就是在intial中初始的值

上面的执行结果如下:统计出了每个年龄的学生个数

[

{

"age" : 21,

"num" : 2

},

{

"age" : 19,

"num" : 1

},

{

"age" : 20,

"num" : 2

},

{

"age" : 22,

"num" : 2

},

{

"age" : 18,

"num" : 3

}

]

对于查询我们还可以使用条件判断进行筛选,方法则是采用condtion

> db.student_infor.group({"key":{age:true},"initial":{num:0},$reduce:function(doc,prev){prev.num++},condition:{"age":{$gt:20}}})

得到age大于20的分组查询情况。

[ { "age" : 21, "num" : 2 }, { "age" : 22, "num" : 2 } ]

还有另外一种写法:

> db.runCommand({group:{ns:"student_infor",key:{age:true},initial:{num:0},$reduce:function(doc,prev){prev.num++}}})

这里添加了一个ns参数,后面跟的是集合的名字。

aggregate:

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

下表展示了一些聚合的表达式:


表达式


描述


实例


$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"}}}])

来看一个具体的例子:group代表分组,id代表分组的依据,average是新一个新生成的字段。$avg是平均的功能,”$age”代表是对age进行平均

>db.student_infor.aggregate({$group:{_id:"student_id",average:{$avg:"$age"}}})

{ "_id" : "student_id", "average" : 19.9 }

找到age最大的

>db.student_infor.aggregate({$group:{_id:"age",average:{$max:"$age"}}})

{ "_id" : "age", "average" : 22 }

找到age最小的

> db.student_infor.aggregate({$group:{_id:"age",average:{$min:"$age"}}})

{ "_id" : "age", "average" : 18 }

将age字段插入到数组中

> db.student_infor.aggregate({$group:{_id:"age",average:{$push:"$age"}}})

{ "_id" : "age", "average" : [ 21, 19, 20, 22, 18, 18, 22, 21, 20, 18 ] }

对age进行求和

> db.student_infor.aggregate({$group:{_id:"age",average:{$sum:"$age"}}})

{ "_id" : "age", "average" : 199 }

时间: 2024-08-14 00:49:53

mongodb学习之:聚合的相关文章

MongoDB学习总结(二)

前言:学习札记! MongoDB学习总结(二) 1.  安装.初识 之前写过一篇MongoDB的快速上手文章,里边详细的讲了如何安装.启动MongoDB,这里就不再累述安装过程,简单介绍一下Mongodb的基本操作. 打开命令行窗口,输入“mongo”命令,默认会连接到test数据库. l  Insert db.person.insert({"name":"Olive","age":18}) db.person.insert({"nam

Mongodb中数据聚合之聚合管道aggregate

在之前的两篇文章<Mongodb中数据聚合之基本聚合函数count.distinct.group>和<Mongodb中数据聚合之MapReduce>中,我们已经对数据聚合提供了两种实现方式,今天,在这篇文章中,我们讲讲在Mongodb中的另外一种数据聚合实现方式--聚合管道aggregate. 面对着广大用户对数据统计的需求,Mongodb从2.2版本之后便引入了新的功能聚合框架(aggregation framework),它是数据聚合的新框架,这个概念类似于数据处理中的管道.每

MongoDb 学习教程

MongoDB教程首页 MongoDB 介绍 MongoDB 优点 MongoDB 安装(Window/Linux) MongoDB 数据模型 MongoDB 创建数据库 MongoDB 删除数据库 MongoDB 创建集合 MongoDB 删除集合 MongoDB 数据类型 MongoDB 插入文档 MongoDB 查询文档 MongoDB 更新文档 MongoDB 删除文档 MongoDB 投影 MongoDB 限制记录 MongoDB 排序文档 MongoDB 索引 MongoDB 聚合

MongoDB 学习小笔记

1.配置:mongod --dbpath=D:\MongoDB\data mongo2.基本的增删查改 find() update()-- 整体更新,局部更新. 修改器: $inc db.person.update({"age":23},{$inc:{"salary":1000}}) 第一个参数为条件.第二个参数为修改的值,但值必须为整数.($inc allowed for numbers only) $set 修改器: db.person.update({&quo

MongoDB学习笔记系列

回到占占推荐博客索引 该来的总会来的,Ef,Redis,MVC甚至Sqlserver都有了自己的系列,MongoDB没有理由不去整理一下,这个系列都是平时在项目开发时总结出来的,希望可以为各位一些帮助和启发,文章中有对新技术的研究(Mongo驱动),对老技术的回顾(代码重构),还有对架构设计的阐述等(面向接口编程,对扩展开放,对修改关闭,所以出现了IMongoRepository接口). MongoDB学习笔记系列~目录 MongoDB学习笔记~环境搭建 (2015-03-30 10:34) M

mongoDB与sql聚合操作对应图

SQL Terms, Functions, and Concepts MongoDB Aggregation Operators WHERE $match GROUP BY $group HAVING $match SELECT $project ORDER BY $sort LIMIT $limit SUM() $sum COUNT() $sum join No direct corresponding operator; however, the $unwindoperator allows

MongoDB学习笔记一:MongoDB的下载和安装

趁着这几天比较空闲,准备学习一下MongoDB数据库,今天就简单的学习了一些MongoDB的下载和安装,并创建了存储MongoDB的数据仓库.将自己今天学习到的写成博客分享给大家. 一.MongoDB的下载和安装 MongoDB的下载地址为:http://www.mongodb.org/ 1.进入官网的首页后,在首页的右上方单击Downloads连接,如图所示: 2.在页面中可以看到目前最新的版本和以前发布过的版本,这里选择最新版本,windows 32位的进行下载,文件的格式为ZIP格式的,单

MongoDB 数据库,对象,集合 MongoDB学习平台

http://www.w3cschool.cc/mongodb/mongodb-databases-documents-collections.html MongoDB 数据库,对象,集合 描述 不管我们学习什么数据库都应该学习其中的基础概念,在mongodb中基本的概念是文档.集合.数据库,下面我们挨个介绍. 数据库 一个mongodb中可以建立多个数据库. MongoDB的默认数据库为"db",该数据库存储在data目录中. 在MongoDB中可以创建数据库,如果你想使用Mongo

MongoDB学习笔记(一:安装时出现The default storage engine &#39;wiredTiger&#39; is not available问题解决)

今晚在自己老式笔记本来试了一下MongoDB的安装,由于配置比较低,只能选择32位版本的MongoDB进行安装,在安装过程中碰到了上述标题所示错误,自己也捣鼓了一个小时左右,终于在一篇博客中找到答案,具体原文链接如下:http://blog.csdn.net/u013457382/article/details/50775268 MongoDB学习笔记(一:安装时出现The default storage engine 'wiredTiger' is not available问题解决)

Mongodb学习笔记

总结下这几天Mongodb学习笔记 /** * 获取MongoClient * @author xuyw * @email [email protected] * @param host * @param port * @return */ public static MongoClient getMongoClient(String host, int... port) { MongoClient mongoClient = null; int portlen = 0; try { if (p