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就可以把这些集合给拉平了,然后再进行聚合

时间: 2024-08-29 09:02:36

Mongo聚合函数的相关文章

mongo聚合函数count问题

在使用一个时间字段做范围查询count()行数时,发现一个问题: 集合总doc数: mongo>db.log.find().count();90370113 查询小于ISODate("2016-10-10T08:00:00.358Z")的doc有多少条: mongo>db.log.find({"startTime":{$lt:ISODate("2016-10-10T08:00:00.358Z")}}).count();31031319

在MongoDB中实现聚合函数

在MongoDB中实现聚合函数 随着组织产生的数据爆炸性增长,从GB到TB,从TB到PB,传统的数据库已经无法通过垂直扩展来管理如此之大数据.传统方法存储和处理数据的成本将会随着数据量增长而显著增加.这使得很多组织都在寻找一种经济的解决方案,比如NoSQL数据库,它提供了所需的数据存储和处理能力.扩展性和成本效率.NoSQL数据库不使用SQL作为查询语言.这种数据库有多种不同的类型,比如文档结构存储.键值结构存储.图结构.对象数据库等等. 我们在本文中使用的NoSQL是MongoDB,它是一种开

聚合函数的使用

聚合函数在统计阿~汇总阿,都灰常的常用.但是有一个小点是要注意一下下的 create table #Tmp(a int ,b int ) insert into #Tmp(a,b) values (1,null),(null,null),(null,3),(2,4) select * from #Tmp a b ----------- ----------- 1 NULL NULL NULL NULL 3 2 4 这里我就简单用 count 和 sum 和 avg 3个最常用的函数试一下. 这个

sqlite之聚合函数的使用

聚合函数对一组值执行计算并返回单一的值.聚合函数对一组值执行计算,并返回单个值.除了 COUNT 以外,聚合函数都会忽略空值. 聚合函数经常与 SELECT 语句的 GROUP BY 子句一起使用. count(*) --返回指定表的数量 例如:select count(*) from studen (where ....); sum(*)--返回数据之和(仅对数值类型字段起作用) 例如: 返回三科成绩总和: select sum(math)+sum(chinese)+sum(english)

SQL Server之 (二) SQL语句 模糊查询 空值处理 聚合函数

(二) SQL语句  模糊查询  空值处理  聚合函数 自己学习笔记,转载请注明出处,谢谢!---酸菜 SQL :结构化查询语言(Structured Query Language),关系数据库管理系统的标准语言. Sybase与Mircosoft对标准SQL做了扩展:T-SQL (Transact-SQL); 注:①SQL对大小写的敏感取决于排序规则,一般不敏感; ②SQL对单引号的转义,用两个单引号来表示一个单引号; ③SQL执行顺序: 1→2→3→4 select  * ---------

7-07聚合函数

查询中使用聚合函数: SUM()返回表达式中所有数值的和,空值被省略,用于数字类型的列. AVG()返回表达式中所有数值的平均数,空值被省略,用于数字类型的列. MAX()返回表达式中的最大值. MIN()返回表达式中的最小值. --查询编号为6的销售总量 SELECT SUM(Amount) FROM OrderInfo WHERE commid=6 --图书音像的进货价 SELECT AVG(inprice)FROM Commid WHERE ID=2 --求进货价中的最高和最低价: SEL

sqlserver中的聚合函数

聚合函数:就是按照一定的规则将多行(Row)数据汇总成一行的函数,对数据进行汇总前,还可以按特定的列(coloumn)将数据进行分组(group by)再汇总,然后按照再次给定的条件进行筛选 一:Count函数1 SELECT COUNT(Birthday) FROM customer2 SELECT COUNT(*) FROM customer3 SELECT COUNT(1) FROM customer1和2区别:使用具体列名作为参数,该列不会计算该列的null值计算在Count之内2和3都

数据存储——SQLite语句之DML 数据操作语言和内置函数之聚合函数

一.连接查询之内连接 select   a.字段,b.字段   from   表1   a,表2   b    where   a.字段=b.字段  And ... 二.DML 数据操作语言 1.增  insert  into values 1-insert  into 表名  values (跟所有字段一一对应的值的列表) 2-insert  into 表名(字段列表)  values (跟字段列表一一对应的值的列表) 3-insert  into 表名  select  对应的字段列表  f

聚合函数与分组

一:聚合函数 count(*),返回行的数目.数值为null的不计算在内,distinct 去重复. sum()计算列中所有值得总和. avg()计算列中所有值得平均值. max()计算列中所有值得总最大值. min()计算列中所有值得最小值. 二:分组的语句 group by 三:having 子句 四:执行顺序 select--from--where--group--order by--having 五:组合查询 1,添加到其他查询的查询语句叫子查询.如果子查询的返回单行时,就可以简单的插入