Mongo聚合函数
{ "_id" : ObjectId("57301c7e5fd5d6e2afa221d1"), "a" : "张三", "b" : 11, "list": [ { "name" : "aaaa", "age" : 21 } ] }
{ "_id" : ObjectId("57301c7e5fd5d6e2afa221d2"), "a" : "张三1", "b" : 22, "list": [ { "name" : "bbbb", "age" : 123 } ] }
{ "_id" : ObjectId("57301c7e5fd5d6e2afa221d3"), "a" : "张三2", "b" : 33, "list": [ { "name" : "cccc", "age" : 21 } ] }
{ "_id" : ObjectId("57301c7e5fd5d6e2afa221d4"), "a" : "张三3", "b" : 44, "list": [ { "name" : "dddd", "age" : 21 } ] }
{ "_id" : ObjectId("57301c7e5fd5d6e2afa221d5"), "a" : "张三4", "b" : 55, "list": [ { "name" : "eeee", "age" : 21 } ] }
{ "_id" : ObjectId("57301c7e5fd5d6e2afa221d6"), "a" : "张三1", "b" : 66, "list": [ { "name" : "ffff", "age" : 19 } ] }
{ "_id" : ObjectId("57301c7e5fd5d6e2afa221d7"), "a" : "张三2", "b" : 77, "list": [ { "name" : "gggg", "age" : 28 } ] }
{ "_id" : ObjectId("57301c7e5fd5d6e2afa221d8"), "a" : "张三3", "b" : 88, "list": [ { "name" : "hhhh", "age" : 28 } ] }
{ "_id" : ObjectId("57301c7e5fd5d6e2afa221d9"), "a" : "张三4", "b" : 99, "list": [ { "name" : "mmmm", "age" : 21 } ] }
{ "_id" : ObjectId("57301c7e5fd5d6e2afa221da"), "a" : "张三", "b" : 11, "list": [ { "name" : "gggg", "age" : 28 } ] }
{ "_id" : ObjectId("57301c7e5fd5d6e2afa221db"), "a" : "张三", "b" : 22, "list": [ { "name" : "hhhh", "age" : 28 } ] }
{ "_id" : ObjectId("57301c7e5fd5d6e2afa221dc"), "a" : "张三", "b" : 33, "list": [ { "name" : "mmmm", "age" : 21 } ] }
可以计算出一共有多少条数据
> db.aa.count()
12
count和find一样只有满足条件的才会参与计算
> db.aa.count({a:"张三"})
4
distinct
db.runCommand({"distinct":[集合名称], "key":[需要区分的字段])
> db.runCommand({"distinct":"aa","key":"a"})
{
"values" : [
"张三",
"张三1",
"张三2",
"张三3",
"张三4"
],
"stats" : {
"n" : 12,
"nscanned" : 12,
"nscannedObjects" : 12,
"timems" : 76,
"cursor" : "BasicCursor"
},
"ok" : 1
}
/* 0 */
{
"_id" : ObjectId("572ae180734e0336c344e8c4"),
"name" : "张三",
"books" : [{
"name" : "mongo权威指南",
"money" : 44.0,
"page" : 643.0
}, {
"name" : "语文",
"money" : 17.0,
"page" : 45.0
}]
} /* 1 */
{
"_id" : ObjectId("572ae180734e0336c344e8c5"),
"name" : "李四",
"books" : [{
"name" : "语文",
"money" : 17.0,
"page" : 45.0
}]
} /* 2 */
{
"_id" : ObjectId("572ae180734e0336c344e8c6"),
"name" : "王二",
"books" : [{
"name" : "数学",
"money" : 28.0,
"page" : 208.0
}, {
"name" : "语文",
"money" : 17.0,
"page" : 45.0
}]
} /* 3 */
{
"_id" : ObjectId("572ae180734e0336c344e8c7"),
"name" : "麻子",
"books" : [{
"name" : "英语",
"money" : 36.0,
"page" : 102.0
}, {
"name" : "化学",
"money" : 8.0,
"page" : 77.0
}]
} /* 4 */
{
"_id" : ObjectId("572ae180734e0336c344e8c8"),
"name" : "王五",
"books" : [{
"name" : "地理",
"money" : 59.0,
"page" : 54.0
}, {
"name" : "化学",
"money" : 8.0,
"page" : 77.0
}, {
"name" : "语文",
"money" : 17.0,
"page" : 45.0
}]
} /* 5 */
{
"_id" : ObjectId("572ae180734e0336c344e8c9"),
"name" : "赵六",
"books" : [{
"name" : "生物",
"money" : 22.0,
"page" : 66.0
}, {
"name" : "化学",
"money" : 8.0,
"page" : 77.0
}, {
"name" : "语文",
"money" : 17.0,
"page" : 45.0
}]
} /* 6 */
{
"_id" : ObjectId("572ae180734e0336c344e8ca"),
"name" : "孙七",
"books" : [{
"name" : "化学",
"money" : 8.0,
"page" : 77.0
}, {
"name" : "语文",
"money" : 200.0,
"page" : 45.0
}]
} /* 7 */
{
"_id" : ObjectId("572ae180734e0336c344e8cb"),
"name" : "张三",
"books" : [{
"name" : "数学",
"money" : 44.0,
"page" : 643.0
}, {
"name" : "语文",
"money" : 17.0,
"page" : 45.0
}, {
"name" : "英语",
"money" : 44.0,
"page" : 643.0
}]
}
db.aa.aggregate({"$project":{"books":1,"_id":0}})
$project 可以books从每个文档中投影出来。
这个语法与查询中德字段选择器比较像:可以通过指定 "fieldname":1选择需要投射的字段,或者通过指定"fieldname":0排除不需要的字段。执行完这个操作之后,结果集中的每个文档都会以{"_id":id,"books":"books"}这样的形式表示。
db.aa.aggregate({"$group":{"_id":"$name","count":{"$sum":1},"aaaa":{"$sum":1}}})
这里首先指定了需要进行分组的字段 "name"。这是由 "_id":"$name"指定的。
第二个字的的艺术是为分组内每个文档的 "count" 字段加1.
count这个字段是我们自己定义的一个字段。
db.aa.aggregate({"$group":{"_id":"$name","count":{"$sum":1},"aaaa":{"$sum":1}}},{"$sort":{"count":1}})
{"$sort":{"count":1}}
这个操作会对结果集中的文档根据count字段进行降序操作。 -1为升序操作
db.aa.aggregate({"$group":{"_id":"$name","count":{"$sum":1},"aaaa":{"$sum":1}}},{"$limit":2})
{"$limit":2}
这个操作会将最终的返回结果集限制为当前结果中的前2个
db.aa.aggregate({"$group":{"_id":"$name","count":{"$sum":1},"aaaa":{"$sum":1}}},{"$skip":2})
{"$skip":2}
接受一个数字n,然后抛弃掉结果集中的前n个文档,将剩余的文档作为结果集返回。
db.aa.aggregate({"$match":{"name":"张三"}})
db.aa.aggregate({"$match":{"name":"张三"}},{"$group":{"_id":"$name","count":{"$sum":1},"aaaa":{"$sum":1}}})
{"$match":{"name":"张三"}}
$match用于对文档集合进行筛选,之后就可以在筛选得到的文档子集上做聚合。
db.aa.aggregate({ "$unwind" : "$books" },{"$group":{"_id":{"book":"$books.name","money":"$money"},"count":{"$sum":1}}})
{ "$unwind" : "$books" }
拆分可以将数组中的每一个值拆分为独立的文档,例如books中是一个集合,使用unwind就可以把这些集合给拉平了,然后再进行聚合
Mongo聚合函数的更多相关文章
- mongo 聚合函数
一: 聚合 常见的聚合操作跟sql server一样,有:count,distinct,group,mapReduce. <1> count count是最简单,最容易,也是最常用的聚合工 ...
- 在MongoDB中实现聚合函数 (转)
随着组织产生的数据爆炸性增长,从GB到TB,从TB到PB,传统的数据库已经无法通过垂直扩展来管理如此之大数据.传统方法存储和处理数据的成本将会随着数据量增长而显著增加.这使得很多组织都在寻找一种经济的 ...
- 在MongoDB中实现聚合函数
在MongoDB中实现聚合函数 随着组织产生的数据爆炸性增长,从GB到TB,从TB到PB,传统的数据库已经无法通过垂直扩展来管理如此之大数据.传统方法存储和处理数据的成本将会随着数据量增长而显著增加. ...
- 可以这样去理解group by和聚合函数
写在前面的话:用了好久group by,今天早上一觉醒来,突然感觉group by好陌生,总有个筋别不过来,为什么不能够select * from Table group by id,为什么一定不能是 ...
- TSQL 聚合函数忽略NULL值
max,min,sum,avg聚合函数会忽略null值,但不代表聚合函数不返回null值,如果表为空表,或聚合列都是null,则返回null.count 聚合函数忽略null值,如果聚合列都是null ...
- SQL Server 聚合函数算法优化技巧
Sql server聚合函数在实际工作中应对各种需求使用的还是很广泛的,对于聚合函数的优化自然也就成为了一个重点,一个程序优化的好不好直接决定了这个程序的声明周期.Sql server聚合函数对一组值 ...
- Mongodb学习笔记四(Mongodb聚合函数)
第四章 Mongodb聚合函数 插入 测试数据 ;j<;j++){ for(var i=1;i<3;i++){ var person={ Name:"jack"+i, ...
- sql语句 之聚合函数
聚合分析 在访问数据库时,经常需要对表中的某列数据进行统计分析,如求其最大值.最小值.平均值等.所有这些针对表中一列或者多列数据的分析就称为聚合分析. 在SQL中,可以使用聚合函数快速实现数据的聚 ...
- oracle数据库函数之============‘’分析函数和聚合函数‘’
1分析函数 分析函数根据一组行来进行聚合计算,用于计算完成狙击的累积排名等,分析函数为每组记录返回多个行 rank_number() 查询结果按照次序排列,不存在并列和站位的情况,可以用于做Oracl ...
随机推荐
- WPF文字排列方式解析zz
WPF文字的处理是一个比较基础的技能.在使用WPF开发工具时,对于各种文字的处理时经常会遇到的情况.希望大家可以通过实践经验的积累,牢固掌握这一方面知识. AD:WOT2014:用户标签系统与用户 ...
- The 2015 China Collegiate Programming Contest A. Secrete Master Plan hdu5540
Secrete Master Plan Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Othe ...
- Mishka and Divisors[CodeForces Round #365 Div.2]
http://codeforces.com/contest/703/problem/E 题意:给定一个最多个数的序列,从中选出最少个数的数字,使得他们的乘积是k的倍数,若有多种选择方式,输出选出数字和 ...
- Angular JS中的依赖注入
依赖注入DI angularjs中与DI相关有angular.module().angular.injector(). $injector.$provide. DI 容器3要素:服务的注册.依赖关系的 ...
- 读书笔记:javascript高级技巧(二)
四.惰性载入函数 因为浏览器兼容的原因,我们的javascript代码会有大量的if语句,将执行引导到正确的代码中,看如下函数: function createXHR(){ if (typeof XM ...
- linux 运行可执行文件version `GLIBC_2.17' not found
http://www.cnblogs.com/q191201771/p/3875316.html root@socfpga:/media/ram/nfs/dvb# ./a.out ./a.: vers ...
- Flex Vector使用(转)
从前(Flex SDK 4.0 以前版本)创建 Vector 实例一定要如下所示,这样的语法使我们在构造 Vector 对象时无法指定元素: var v:Vector.<T> = new ...
- [慢查优化]慎用MySQL子查询,尤其是看到DEPENDENT SUBQUERY标记时
案例梳理时间:2013-9-25 写在前面的话: 在慢查优化1和2里都反复强调过 explain 的重要性,但有时候肉眼看不出 explain 结果如何指导优化,这时候还需要有一些其他基础知识的佐助, ...
- MongoDB数据库的简介及安装
一.MongoDB数据库简介 简介 MongoDB是一个高性能,开源,无模式的,基于分布式文件存储的文档型数据库,由C++语言编写,其名称来源取自“humongous”,是一种开源的文档数据库──No ...
- 利用SQL注入漏洞登录后台的实现方法 。。。。转载
一.SQL注入的步骤 a) 寻找注入点(如:登录界面.留言板等) b) 用户自己构造SQL语句(如:' or 1=1#,后面会讲解) c) 将sql语句发送给数据库管理系统(DBMS) d) DBMS ...