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

示例:

db.collection.aggregate(

{$match:{x:1},

{limit:10},

{$group:{_id:"$age"}}}

);

操作符介绍:

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

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

$limit:限制结果数量

$skip:忽略结果的数量

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

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

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

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

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

{

"_id":"10280",//zipcode

"city":"NEW YORK",//城市

"state":"NY",//城市缩写

"pop":5574,//人口

"loc": [//经纬度

-74.016323,

40.710537

]

}

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

db.zipcodes.aggregate(

{$group:{_id:"$state", totalPop:{$sum:"$pop"}},

{$match:{totalPop:{$gte:10000000}}}

);

上面的语句相当于: 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

db.zipcodes.aggregate( { $group :

{ _id : { state : "$state", city :"$city"},

pop : { $sum : "$pop"} } },

{ $group :

{ _id : "$_id.state",

avgCityPop : { $avg : "$pop"} } } )

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

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

{

"_id": {

"state":"CO",

"city":"EDGEWATER"

},

"pop":13154

}

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

{

"_id":"MN",

"avgCityPop":5335

},

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

db.zipcodes.aggregate(

{$group:{_id:{state:"$state",city:"$city"}, totalPop:{$sum:"$pop"}}},//统计州的所有人,生成一个新的文档,是关于州与其总人口

{$sort:{"totalPop":-1}},//对新文档,根据人口数倒序排序

{$group:{_id:"$_id.state",

"biggestCity":{$first:"$_id.city"},//最大人口的城市

"biggestPop":{$first:"totalPop"},//最大人口的数量

"smallestCity":{$last:"$_id.city"},

"smallestPop":{$last:"totalPop"}

}},//重新组成一个新的文件,包含,州名,最大人口数和最小人口数

//本来结构到此基本上差不多了

//但我们需要再对数据进行格式化

{$project:

{_id:0,

state:"$_id",

biggestCity:{name:"$biggestCity",pop:"$biggestPop"},

smallestCity:{name:"$smallestCity",pop:"$smallestPop"}

}

}

);

数据结构,如下:

{

"state":"RI",

"biggestCity": {

"name":"CRANSTON",

"pop":176404

},

"smallestCity": {

"name":"CLAYVILLE",

"pop":45

}

}

java mongodb 聚合函数_MongoDB的聚合函数 Aggregate相关推荐

  1. java mongodb 查询 游标_MongoDB find()方法:查询数据

    在关系型数据库中,可以实现基于表的各种各样的查询,以及通过投影来返回指定的列,相应的查询功能也可以在 MongoDB 中实现.同时由于 MongoDB 支持嵌套文档和数组,MongoDB 也可以实现基 ...

  2. java mongodb 批量删除_MONGODB删除/新增/更改大量记录的方法

    @Indexed(expireAfterSeconds=180) private Date deletedAt; 以上代码,如果字段deletedAt有值,那么将在180秒后被MONGODB删除,如果 ...

  3. java mongodb 使用场景_mongodb使用场景一般是什么?mongodb有哪些基本命令?

    此前我们已经充分了解过了mongodb的原理及各种概念,你们知道一般在什么场景下才会使用mongodb吗?下面通过文章来了解一下吧. 一.mongodb基本命令 1).数据库切换use admin; ...

  4. java mongodb 插入数据_mongoDB 插入数据 用java实现

    import java.net.UnknownHostException; import com.mongodb.BasicDBObject; import com.mongodb.DB; impor ...

  5. java mongodb 批量更新_MongoDB批量更新和批量插入的方式

    @AutowiredprivateMongoTemplate mongoTemplate; (1)批量插入示例如下: ListinsertDataList; BulkOperations operat ...

  6. MongoDB学习总结(三) —— 常用聚合函数

    上一篇介绍了MongoDB增删改查命令的基本用法,这一篇来学习一下MongoDB的一些基本聚合函数. 下面我们直奔主题,用简单的实例依次介绍一下. > count() 函数 集合的count函数 ...

  7. mongodb聚合查询优化_MongoDB聚合查询详解

    聚合操作主要用于处理数据并返回计算结果.聚合操作将来自多个文档的值组合在一起,按条件分组后,再进行一系列操作(如求和.平均值.最大值.最小值)以返回单个结果. MongoDB 提供了三种执行聚合的方法 ...

  8. Hive函数(内置函数(字符串函数,数学函数,日期函数,集合函数,条件函数,聚合函数,表生成函数)和自定义函数(自定义函数创建流程,临时函数,永久函数)))(四)

    Hive函数(内置函数和自定义函数) 一.内置函数 1.字符串函数 (1)ascii (2)base64 (3)concat (4)concat_ws (5)format_number (6)subs ...

  9. Hive学习---4、函数(单行函数、高级聚合函数、炸裂函数、窗口函数)

    1.函数 1.1 函数简介 Hive会将常用的逻辑封装成函数给用户进行使用,类似java中的函数. 好处:避免用户反复写逻辑,可以直接拿来使用 重点:用户需要知道函数叫什么,能做什么 Hive提供了大 ...

最新文章

  1. GitHub标星近1万:只需5秒音源,这个网络就能实时“克隆”你的声音
  2. 数值分区间_EXCEL统计区间个数的专属函数
  3. 微信公众平台开发教程(九)微信公众平台通用开发框架
  4. java中exec命令,使用Java中的Runtime.exec()執行Windows命令
  5. 支付宝支付 - 异步通知与同步通知
  6. SQL Server 视图设计器
  7. 如何使用python多线程_Python3如何使用多线程升程序运行速度
  8. 发现读纸质媒介比电子媒介的乐趣大多了
  9. 你竟是这样的月饼-今年中秋节折腾的月饼2.0
  10. 反转字符串中的元音字符
  11. 第1章—Spring之旅—简化Spring的java开发
  12. BOOST库介绍(四)——文件系统相关
  13. CentOS7.0离线安装RHadoop
  14. QuartusII13.1 操作
  15. AdapterVIew
  16. 一个错误例子带你深入理解数据库“自联接”查询
  17. 李四光预测的地震带及合肥地震分析
  18. Solidworks直接打开SWB文件报错怎么办
  19. 删除Custom about:config即可轻松输入
  20. 梦幻西游代理途径有哪些?需要注意什么

热门文章

  1. 自然语言处理包pytorch、torchvision、torchtext安装(亲测有效)
  2. tf.layers.conv2d_transpose 反卷积
  3. vue-cli脚手架下,assets中的图片路径使用变量?
  4. MYSQ--SHOW PROFILE Syntax and useing
  5. 在不停止mysql复制主服务器的情况下,配置一个mysql复制从服务器
  6. Zend Studio 7.2 汉化包 及安装方法
  7. 17个可以节省你时间的CSS工具
  8. 让sourceSafe每天自动备份及修复(适用于vss6.0和vss2005)
  9. google 插件_google这4款插件我每天都用,省时无数
  10. java程序员_哪些书是不可错过的?Java程序员书单分享