{ "_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聚合函数的更多相关文章

  1. mongo 聚合函数

    一: 聚合 常见的聚合操作跟sql server一样,有:count,distinct,group,mapReduce. <1> count count是最简单,最容易,也是最常用的聚合工 ...

  2. 在MongoDB中实现聚合函数 (转)

    随着组织产生的数据爆炸性增长,从GB到TB,从TB到PB,传统的数据库已经无法通过垂直扩展来管理如此之大数据.传统方法存储和处理数据的成本将会随着数据量增长而显著增加.这使得很多组织都在寻找一种经济的 ...

  3. 在MongoDB中实现聚合函数

    在MongoDB中实现聚合函数 随着组织产生的数据爆炸性增长,从GB到TB,从TB到PB,传统的数据库已经无法通过垂直扩展来管理如此之大数据.传统方法存储和处理数据的成本将会随着数据量增长而显著增加. ...

  4. 可以这样去理解group by和聚合函数

    写在前面的话:用了好久group by,今天早上一觉醒来,突然感觉group by好陌生,总有个筋别不过来,为什么不能够select * from Table group by id,为什么一定不能是 ...

  5. TSQL 聚合函数忽略NULL值

    max,min,sum,avg聚合函数会忽略null值,但不代表聚合函数不返回null值,如果表为空表,或聚合列都是null,则返回null.count 聚合函数忽略null值,如果聚合列都是null ...

  6. SQL Server 聚合函数算法优化技巧

    Sql server聚合函数在实际工作中应对各种需求使用的还是很广泛的,对于聚合函数的优化自然也就成为了一个重点,一个程序优化的好不好直接决定了这个程序的声明周期.Sql server聚合函数对一组值 ...

  7. Mongodb学习笔记四(Mongodb聚合函数)

    第四章 Mongodb聚合函数 插入 测试数据 ;j<;j++){ for(var i=1;i<3;i++){ var person={ Name:"jack"+i, ...

  8. sql语句 之聚合函数

      聚合分析 在访问数据库时,经常需要对表中的某列数据进行统计分析,如求其最大值.最小值.平均值等.所有这些针对表中一列或者多列数据的分析就称为聚合分析. 在SQL中,可以使用聚合函数快速实现数据的聚 ...

  9. oracle数据库函数之============‘’分析函数和聚合函数‘’

    1分析函数 分析函数根据一组行来进行聚合计算,用于计算完成狙击的累积排名等,分析函数为每组记录返回多个行 rank_number() 查询结果按照次序排列,不存在并列和站位的情况,可以用于做Oracl ...

随机推荐

  1. Codeforces 581F Zublicanes and Mumocrates(树形DP)

    题目大概说有一棵树要给结点染色0或1,要求所有度为1的结点一半是0一半是1,然后问怎么染色,使两端点颜色不一样的边最少. dp[0/1][u][x]表示以u结点为根的子树中u结点是0/1色 且其子树有 ...

  2. Shell 编程基础之 For 练习

    一.语法 for var in con1 con2 con3 ... do # 执行内容 done for var in {min..max} do # 执行内容 done for (( 初始值; 限 ...

  3. NUC_TeamTEST_B(贪心)

    B - B Time Limit:1000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u Submit Statu ...

  4. iOS之02-第一个OC的类

    OC是一门面向对象的语言,因此它也有类.对象.静态\动态方法.成员变量的概念.这讲就来创建第一个OC的类. 第一个类的源码: /* 人 类名:Person 属性(成员变量\实例变量):体重.年龄 行为 ...

  5. 元件供应商泄露情报,微软或在研发HoloLens二代

    众所周知,微软HoloLens全息影像头盔在2015年1月22日推出,到目前为止将近两年时间,那微软会何时推出新版Hololen呢?对此,591ARVR资讯网www.591arvr.com小编特别关注 ...

  6. Motion images compression and restoration based on computer vision

    This technique should apply to both normal video (consequtive sequences of pictures of real world) a ...

  7. [深入浅出Windows 10]分屏控件(SplitView)

    4.18 分屏控件(SplitView) 分屏控件(SplitView)是Windows 10新增的控件类型,也是Windows 10通用应用程序主推的交互控件,通常和一个汉堡按钮搭配作为一种抽屉式菜 ...

  8. 彩色照片转换为黑白照片(Color image converted to black and white picture)

    This blog will be talking about the color image converted to black and white picture. The project st ...

  9. HDU 1087 简单dp,求递增子序列使和最大

    Super Jumping! Jumping! Jumping! Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 ...

  10. SolrCloud 5.x 集群部署方法

    CentOS下安装Solr5.3    http://www.centoscn.com/image-text/install/2015/0918/6190.html solr5.3.1 集群服务搭建 ...