出处:http://www.cnblogs.com/stephen-liu74/archive/2012/09/19/2652308.html
MongoDB除了基本的查询功能之外,还提供了强大的聚合功能。这里主要介绍count、distinct和group。
1. count:
--在空集合中,count返回的数量为0。
> db.test.count()
0
--测试插入一个文档后count的返回值。
> db.test.insert({"test":1})
> db.test.count()
1
> db.test.insert({"test":2})
> db.test.count()
2
--count和find一样,也接受条件。从结果可以看出,只有符合条件的文档参与了计算。
> db.test.count({"test":1})
1
2. distinct:
distinct用来找出给定键的所有不同的值。使用时也必须指定集合和键。
--为了便于后面的测试,先清空测试集合。
> db.test.remove()
> db.test.count()
0
--插入4条测试数据。请留意Age字段。
> db.test.insert({"name":"Ada", "age":20})
> db.test.insert({"name":"Fred", "age":35})
> db.test.insert({"name":"Andy", "age":35})
> db.test.insert({"name":"Susan", "age":60})
--distinct命令必须指定集合名称,如test,以及需要区分的字段,如:age。
--下面的命令将基于test集合中的age字段执行distinct命令。
> db.runCommand({"distinct":"test", "key":"age"})
{
"values" : [
20,
35,
60
],
"stats" : {
"n" : 4,
"nscanned" : 4,
"nscannedObjects" : 4,
"timems" : 0,
"cursor" : "BasicCursor"
},
"ok" : 1
}
3. group:
group做的聚合有些复杂。先选定分组所依据的键,此后MongoDB就会将集合依据选定键值的不同分成若干组。然后可以通过聚合每一组内的文档,产生一个结果文档。
--这里是准备的测试数据
> db.test.remove()
> db.test.insert({"day" : "2012-08-20", "time" : "2012-08-20 03:20:40", "price" : 4.23})
> db.test.insert({"day" : "2012-08-21", "time" : "2012-08-21 11:28:00", "price" : 4.27})
> db.test.insert({"day" : "2012-08-20", "time" : "2012-08-20 05:00:00", "price" : 4.10})
> db.test.insert({"day" : "2012-08-22", "time" : "2012-08-22 05:26:00", "price" : 4.30})
> db.test.insert({"day" : "2012-08-21", "time" : "2012-08-21 08:34:00", "price" : 4.01})
--这里将用day作为group的分组键,然后取出time键值为最新时间戳的文档,同时也取出该文档的price键值。
> db.test.group( {
... "key" : {"day":true}, --如果是多个字段,可以为{"f1":true,"f2":true}
... "initial" : {"time" : "0"}, --initial表示$reduce函数参数prev的初始值。每个组都有一份该初始值。
... "$reduce" : function(doc,prev) { --reduce函数接受两个参数,doc表示正在迭代的当前文档,prev表示累加器文档。
... if (doc.time > prev.time) {
... prev.day = doc.day
... prev.price = doc.price;
... prev.time = doc.time;
... }
... } } )
[
{
"day" : "2012-08-20",
"time" : "2012-08-20 05:00:00",
"price" : 4.1
},
{
"day" : "2012-08-21",
"time" : "2012-08-21 11:28:00",
"price" : 4.27
},
{
"day" : "2012-08-22",
"time" : "2012-08-22 05:26:00",
"price" : 4.3
}
]
--下面的例子是统计每个分组内文档的数量。
> db.test.group( {
... key: { day: true},
... initial: {count: 0},
... reduce: function(obj,prev){ prev.count++;},
... } )
[
{
"day" : "2012-08-20",
"count" : 2
},
{
"day" : "2012-08-21",
"count" : 2
},
{
"day" : "2012-08-22",
"count" : 1
}
]
--最后一个是通过完成器修改reduce结果的例子。
> db.test.group( {
... key: { day: true},
... initial: {count: 0},
... reduce: function(obj,prev){ prev.count++;},
... finalize: function(out){ out.scaledCount = out.count * 10 } --在结果文档中新增一个键。
... } )
[
{
"day" : "2012-08-20",
"count" : 2,
"scaledCount" : 20
},
{
"day" : "2012-08-21",
"count" : 2,
"scaledCount" : 20
},
{
"day" : "2012-08-22",
"count" : 1,
"scaledCount" : 10
}
]
相关推荐
Paul Done为《实用MongoDB聚合》一书创建和组装内容的主要仓库。 该书的发行版本可在以下获得: 本书的内容是作为一组Markdown文件编写的,然后将其生成为一组静态HTML / PNG / CSS / JS文件,这些文件可以通过...
01.MongoDB基础 视频 01-复习_recv 02-简介_recv 03-增、改、删_recv 04-查询_recv 05-查询2_recv 06-查询3_recv 07-聚合-分组_recv 08-聚合-筛选、排序、分页_recv 09-聚合-拆分数组_recv 资料 02.MongoDB高级 视频...
内容MongoDB聚合基础汇总介绍管道的概念聚合结构和语法$ match:过滤文档使用$ project 使用表达式光标式方法阶段$ group阶段$放开$ lookup阶段利用MongoDB的灵活架构mongoimport 模式的重要性探索模式迁移架构观看...
MongoDB基础知识 这是发布的的存储库。 它包含从头到尾完成该课程所必需的所有支持项目文件。 要求和设置 要开始使用项目文件,您需要: 安装 安装 安装 关于MongoDB基础知识 将帮助您开始使用MongoDB在云计算...
自己整理的MongoDB相关的基础内容,主要涉及到数据库操作、集合操作、索引、聚合等内容
最近接到需求,需要对用户账户下的设备状态,分别按照天以及小时进行聚合,以此为基础绘制设备状态趋势图. 实现思路是启动定时任务,对各用户的设备状态数据分别按照小时以及天进行聚合,并存储进数据库中供用户后续...
基于Mgo,Mongo-go-driver这两个比较常用的MongoDB基础库,做了连接池初始化,model层服务封装,提供:初始化MongoDB连接池复用, MongoDB集合(类似MySQL的数据表)的增、删、改、查,事务、管道操作、聚合操作、...
自定义基础存储库 7.7。从聚合根发布事件 7.8。Spring数据扩展 7.8.1。Querydsl扩展 7.8.2。Web支持 7.8.3。存储库填充程序 7.8.4。传统网络支持 参考文档 8.介绍 8.1。文档结构 9. MongoDB支持 9.1。入门 9.2。示例...
用MindMaster以脑图形式,记录对MongoDB的简单操作和基础了解,适合完全不了解MongoDB的人想快速的了解下面几个问题: 1.MongoDB是什么? 2.安装MongoDB 3.MongoDB对文档的增删改查、索引、聚合 4.用Java操作MongoDB...
1098.1.3 停止MongoDB 1108.2 监控 1108.2.1 使用管理接口 1108.2.2 serverStatus 1128.2.3 mongostat 1138.2.4 第三方插件 1138.3 安全和认证 1148.3.1 认证的基础知识 1148.3.2 认证的工作原理 ...
1078.1.2 配置文件 1098.1.3 停止MongoDB 1108.2 监控 1108.2.1 使用管理接口 1108.2.2 serverStatus 1128.2.3 mongostat 1138.2.4 第三方插件 1138.3 安全和认证 1148.3.1 认证的基础知识 1148.3...
1、本课程结合实际C/C++项目案例以实战为主,从MongoDB开发环境的安装配置到基础常用的操作、大尺寸文件GridFS的存储、排序、索引、聚合、在多线程中使用以及基于MongoDB的考试系统项目,所有功能均有源代码和文档...
├───────mongodb-file-service────────Mongodb文件服务模块[11010] ├───────redis-delay-service─────────延迟消费服务模块[11020] ├──cloud-modules-web──────────...
用户通过其API与已部署的应用进行交互包含的组件:具有强大的索引和查询,聚合以及广泛的驱动程序支持的MongoDB已经成为许多初创企业和企业的首选JSON数据存储。 :创建和管理您自己的云基础架构,并将Kubernetes...
数据分析师课件]2-1python基础知识.html 数据分析师课件]2-4基于 HTML的爬虫,Python (Beautifulsoup) 实现html 数据分析师课件]2-5网络爬虫高级技巧: 使用代理和反爬虫机制.html [数据分析师课件]2-6 应用案例: ...
mongodb本身的聚合函数统计维度,支持很多比如:max,min,sum,avg,first,last,标准差,采样标准差,复杂的统计方法可以在基础聚合函数上建立,比如行为习惯: getDB().getCollection(collectionName)....
物联网基础设施由传感器,低能耗网络,网关,收集信息的服务器和数据库组成。 这些元素的最后两个通常位于云中。 基础设施的作用是收集,存储和处理传感器数据流。 主要挑战包括处理大量数据,从中提取见解。 为了...
│ 第05节:TortoiseGit的本地使用.avi │ 第06节:Egit的本地使用.avi │ 第07节:远程使用以及冲突解决.avi │ 第08节:基本业务功能和数据字典.avi │ 第09节:搭建基础的开发环境.avi │ 第10节:Spring+Mybatis...
基础设施管理 吉特 前端 Angular.js HTML5 Java脚本 CSS和样式 前端工具生态系统 聚合物 灰烬 IT安全与加固 服务器安全性 安全发展 ### NoSQL MongoDB的 质量保证 ATDD验收测试驱动的开发 蠡 代码设计 代码...
穆索地图音乐家的全球地图。版本 2.0.0 在线近 2 年后,我正在重建 musomap。 一个更灵活的工作环境来开发新想法和发布改进。...基础设施NodeJS (Express) MongoDB工具基因运动罗博蒙戈伙伴天蓝色蒙古实验室参考