Aggregate的使用,有利于我们对MongoDB中的集合进行进一步的拆分。

示例:

  1. db.collection.aggregate(
  2. {$match:{x:1},
  3. {limit:10},
  4. {$group:{_id:"$age"}}}
  5. );

操作符介绍:

$project:包含、排除、重命名和显示字段

$match:查询,需要同find()一样的参数

$limit:限制结果数量

$skip:忽略结果的数量

$sort:按照给定的字段排序结果

$group:按照给定表达式组合结果

$unwind:分割嵌入数组到自己顶层文件

============================================================

这是MongoDB官网上的一个Data Model:

  1. {
  2. "_id": "10280",//zipcode
  3. "city": "NEW YORK",//城市
  4. "state": "NY",//城市缩写
  5. "pop": 5574,//人口
  6. "loc": [ //经纬度
  7. -74.016323,
  8. 40.710537
  9. ]
  10. }

1、查出一个超过1千万人口的城市

  1. db.zipcodes.aggregate(
  2. {$group:{_id:"$state", totalPop:{$sum:"$pop"}},
  3. {$match:{totalPop:{$gte:10000000}}}
  4. );

上面的语句相当于: SELECT  state, sum(pop)  totalPop from zipcodes group by state having by totalPop >= 10000000;

分析:

$group主要是用于分组,其中_id是用组的类型集合,totalPop是生成的一个新的字段,用于存储总数。

其实,document经过$group之后,系统会为其生成一个新的document(新的documment为{"_id":"AK","totalPop":550043}),这在下面的例子中,我们会看得更清楚。

$match,相当于为新生成的document提供查询功能

2、求平均人口,每个state

  1. db.zipcodes.aggregate( { $group :
  2. { _id : { state : "$state", city : "$city" },
  3. pop : { $sum : "$pop" } } },
  4. { $group :
  5. { _id : "$_id.state",
  6. avgCityPop : { $avg : "$pop" } } } )

上述示例中出现了两个$group,那是什么含义呢?

第一个$group是将原来的zipcodes 这个 document变成新的,如:

  1. {
  2. "_id" : {
  3. "state" : "CO",
  4. "city" : "EDGEWATER"
  5. },
  6. "pop" : 13154
  7. }

第二个 $group是在,原有的基础之上,再进行一次重新格式化数据,再生成新的document,如:

  1. {
  2. "_id" : "MN",
  3. "avgCityPop" : 5335
  4. },

3、查询每个州人口最大和最小的城市

  1. db.zipcodes.aggregate(
  2. {$group:{_id:{state:"$state",city:"$city"}, totalPop:{$sum:"$pop"}}},//统计州的所有人,生成一个新的文档,是关于州与其总人口
  3. {$sort:{"totalPop":-1}},//对新文档,根据人口数倒序排序
  4. {$group:{_id:"$_id.state",
  5. "biggestCity":{$first:"$_id.city"},//最大人口的城市
  6. "biggestPop":{$first:"totalPop"},//最大人口的数量
  7. "smallestCity":{$last:"$_id.city"},
  8. "smallestPop":{$last:"totalPop"}
  9. }},//重新组成一个新的文件,包含,州名,最大人口数和最小人口数
  10. //本来结构到此基本上差不多了
  11. //但我们需要再对数据进行格式化
  12. {$project:
  13. {_id:0,
  14. state:"$_id",
  15. biggestCity:{name:"$biggestCity",pop:"$biggestPop"},
  16. smallestCity:{name:"$smallestCity",pop:"$smallestPop"}
  17. }
  18. }
  19. );

数据结构,如下:

  1. {
  2. "state" : "RI",
  3. "biggestCity" : {
  4. "name" : "CRANSTON",
  5. "pop" : 176404
  6. },
  7. "smallestCity" : {
  8. "name" : "CLAYVILLE",
  9. "pop" : 45
  10. }
  11. }

MongoDB的聚合函数 Aggregate的更多相关文章

  1. 聚合函数 Aggregate Function

    聚合函数是用来统计每个分组的统计信息,它们要跟 group by 一起使用,用来将每个分组所有数据 聚合 成一条统计数据. 包括 max/min/count/avg/sum 等. -- 按照部门进行分 ...

  2. MongoDB中聚合工具Aggregate等的介绍与使用

    Aggregate是MongoDB提供的众多工具中的比较重要的一个,类似于SQL语句中的GROUP BY.聚合工具可以让开发人员直接使用MongoDB原生的命令操作数据库中的数据,并且按照要求进行聚合 ...

  3. C#操作mongodb(聚合函数)-分组找出每组的最大值

    public static void OnQuery_QXData(string DBName, string tablename,string layername)        {         ...

  4. 【Mongodb】聚合查询 && 固定集合

    概述 数据存储是为了可查询,统计.若数据只需存储,不需要查询,这种数据也没有多大价值 本篇介绍Mongodb 聚合查询(Aggregation) 固定集合(Capped Collections) 准备 ...

  5. MongoDB 聚合函数

    概念 聚合函数是对一组值执行计算并返回单一的值 主要的聚合函数 count distinct Group MapReduce 1.count db.users.count() db.users.cou ...

  6. MongoDB 聚合函数及排序

    聚合函数 最大值  $max db.mycol.aggregate([{$group : {_id : "$by_user", num_max : {$max: "$li ...

  7. mongodb聚合查询-aggregate

    Mongodb-aggregate 在工作中经常遇到一些mongodb的聚合操作,和mysql对比起来,mongo存储的可以是复杂的类型,比如数组,字典等mysql不善于处理的文档型结构,但是mong ...

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

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

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

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

随机推荐

  1. JS Img对象获取图片高度宽度(兼容Chrome)

    一般获取图片高度宽度的写法: var img = new Image();img.src = imgsrc;var imgWH = CalcImgTiple(img.width, img.height ...

  2. SQL Server 常用函数总结

    SQL去空格函数 1.ltrim(‘内容’)--去掉字符左边的空格 代码如下 declare @str varchar(100) set @str=' ADFADF' select @str sele ...

  3. 201621123012 《Java程序设计》第1周学习总结

    1. 本章学习总结 学习了java的理论知识和它与C语言的差别,什么是JVM,区分JRE与JDK并学习JAVA环境的安装.熟悉控制台下的常用命令,java函数的编写.熟练使用编写JAVA所需要的工具( ...

  4. ubuntu 16.4安装toolsbelt heroku

    https://devcenter.heroku.com/articles/getting-started-with-python#set-up # Run this from your termin ...

  5. nginx负载均衡fair模块安装和配置

    nginx-upstream-fair-master fair模块源码 官方github下载地址:https://github.com/gnosek/nginx-upstream-fair说明:如果从 ...

  6. Linux 意外操作后如何进行数据抢救

    Linux 意外操作后如何进行数据抢救 在 GUI 中使用  shift + delete  组合键或是 CLI 下使用 rm -rf 删除选项,这个文件并没有从硬盘(或是其它存储设备)上彻底销毁.当 ...

  7. django部署ubuntu数据库MYSQL时区问题

    SELECT * FROM mysql.time_zone; SELECT * FROM mysql.time_zone_name; mysql_tzinfo_to_sql /usr/share/zo ...

  8. js 伪数组 arguments

    /* 定义一个函数,如果不确定用户是否传入了参数, arguments可以获取到函数传入了多少个参数 和每个参数的值 */ /* 定义 */ function f1() { //获取的是函数在调用的时 ...

  9. python学习之路---day21--模块和栈

    模块和栈 一:计数模块collections 基础版本: s="qwewsfdfjiehrfqweqweqwqewq" dic={} for el in s: dic[el]=di ...

  10. perl中一些模块的ubuntu中依赖包

    GD 先更新系统中的依赖包: sudo apt-get update sudo apt-get upgrade 进入 cpan> install GD 会提示没有安装libgd模块. 所以,先需 ...