mongoDB聚合操作

文章目录

  • 1.准备一组数据
  • 2.$group 分组管道
    • 2.1 统计单组
    • 2.2 统计多组
  • 3.$match 过滤管道
    • 拓展 统计数据个数
  • 4.$project 映射管道
  • 5.$sort $skip $limit
  • 6.常用表达式补充

mongoDB聚合常用的管道有

  • $match: 过滤管道过滤数据,只输出符合条件的文档
  • $group: 将集合中的文档分组,可用于统计结果
  • $project 映射管道,映射输出

  • $sort: 排序管道,将输入文档排序后输出
  • $limit: 限制管道,限制聚合管道返回的文档书
  • $skip: 跳过管道,跳过指定数量的文档,并返回余下的文档

1.准备一组数据

db.data.insertMany([{name:"Tom", city:"cityA",type:"aaa",num:609,age:18},
{name : "allen", city :"cityC", type: "bbb", num : 549,age:20},
{name :"jerry", city :"cityA", type :"bbb", num : 593,age:22},
{name :"frank", city : "cityB", type:"aaa", num : 657,age:21},
{name :"jack", city : "cityC", type:"aaa", num : 620,age:18},
{name :"alice", city : "cityB", type:"ccc", num : 584,age:20},
{name :"marry", city:"cityA", type:"bbb", num : 599,age:22}
])
db.data.find()

2.$group 分组管道

2.1 统计单组

对city分组,并求每组num的平均值。

db.data.aggregate({$group:{_id:'$city',avg_num:{$avg:'$num'}}})

2.2 统计多组

db.data.aggregate({$group:{_id:'$city',avg_num:{$avg:'$num'},avg_age:{$avg:'$age'}}})


3.$match 过滤管道

可以将其作用结果传给后一个管道。

对city不是"cityC"的city分组(过滤掉“”cityC"),并求每组num的平均值。

db.data.aggregate({$match:{city:{$ne:"cityC"}}},{$group:{_id:'$city',avg_num:{$avg:'$num'}}})


对age≥20的city分组(过滤掉“”cityC"),并求每组num的平均值。

db.data.aggregate({$match:{age:{$gte:20}}},{$group:{_id:'$city',avg_num:{$avg:'$num'}}})

其中,

  • _id是分组的依据

  • avg_num是新定义的字段名

  • $avg 是求值方法的表达式,这里是求平均值的表达式

  • ‘$city’ 指定的分组依据

  • ‘$num’ 指定的要求值的字段


拓展 统计数据个数

如果要统计每组数据的个数,则可以使用 $sum 实现。

$sum的功能是求某字段的和,用$sum计数时,如统计每个city的人数,可以写成:

db.data.aggregate({$group:{_id:'$city',count:{$sum:1}}})

即对字段,常数1进行计数。如果写为{$sum:2},则计数结果为4,4,6。

4.$project 映射管道

db.data.aggregate({$group:{_id:'$city',avg_num:{$avg:'$num'},avg_age:{$avg:'$age'}}},{$project:{avg_num:1}})


如图,结果不再显示avg_age,只显示了_id和avg_num。


5.$sort $skip $limit

  • 按年龄降序排列,跳过第一条,取前三条数据
db.data.aggregate({$sort:{age:-1}},{$skip:1},{$limit:3})

  • 按年龄降序排列,取前三条数据,跳过第一条,
db.data.aggregate({$sort:{age:-1}},{$limit:3},{$skip:1})

  • 取前三个数据,跳过第一个,再降序排列
db.data.aggregate({$limit:3},{$skip:1},{$sort:{age:-1}})


管道的写法不用考虑优先级的问题,从左到右依次执行。

6.常用表达式补充

$sum: 计算总和, $sum:1 表示以⼀倍计数
$avg: 计算平均值
$min: 获取最⼩值
$max: 获取最⼤值
$push: 在结果⽂档中插⼊值到⼀个数组中
$first: 根据资源⽂档的排序获取第⼀个⽂档数据
$last: 根据资源⽂档的排序获取最后⼀个⽂档数据

mongoDB聚合操作_aggregate()归纳相关推荐

  1. MongoDB 聚合操作

    MongoDB 聚合操作 在MongoDB中,有两种方式计算聚合:Pipeline 和 MapReduce.Pipeline查询速度快于MapReduce,但是MapReduce的强大之处在于能够在多 ...

  2. Scrapy框架之MongoDB聚合操作

    目录 MongoDB聚合操作 聚合操作的基本语法 常用的聚合操作 管道命令之$group 按照某个字段进行分组 详解 计算集合中某个字段的平均值 常用表达式 管道命令之$match 示例 管道命令之$ ...

  3. mongodb聚合操作之group

    group介绍 mongodb中提供了一个很实用的聚合函数group,这个有点类似于mysql的group by 的功能,但又不是mysql中group by 的功能,它更多是用来做数据的聚合操作使用 ...

  4. Spring Boot 整合——MongoDB整合3(MongoDB聚合操作)

    文章前面 关于版本 依赖 版本 springboot 2.0.8.RELEASE mongodb 4.0.14 本内容只是为了介绍mongodb最基础的使用以及配置,作为一个知名的数据库,其存在相当多 ...

  5. MongoDB——聚合操作详解

    聚合(Aggregation)为集合文档数据提供各种处理数据方法,并返回计算结果. MongoDB提供了3种方式来执行聚合命令: 聚合管道方法 map-reduce方法 单一目标聚合方法 1. 聚合管 ...

  6. MongoDB——聚合操作

    一.聚合操作 1.1.聚合操作的概述 聚合操作处理数据记录并返回计算结果(诸如统计平均值,求和等). 聚合操作组值来自多个文档,可以对分组数据执行各种操作以返回单个结果. 聚合操作包含三类:单一作用聚 ...

  7. MongoDB 聚合操作之$group使用

    https://blog.csdn.net/qq_18948359/article/details/88777066

  8. MongoDB使用详解_4_常用聚合操作详解

    1.测试数据 emp集合 db.emp.insert([{_id: 1,name: "tom",age: 13,likes: ["basketball", &q ...

  9. 04 MongoDB各种查询操作 以及聚合操作总结

    基础篇(能解决工作中80%的问题): MongoDB的概述.应用场景.下载方式.连接方式和发展历史等 MongoDB数据类型.重要概念以及shell常用指令 MongoDB文档的各种增加.更新.删除操 ...

最新文章

  1. Git使用笔记(一)
  2. js DOM之基础详解
  3. Linux操作系统中,*.zip、*.tar、*.tar.gz、*.tar.bz2、*.tar.xz、*.jar、*.7z等格式的压缩与解压...
  4. 百练OJ:2728:第一个C++程序
  5. 什么是URL?协议头、路径和端口是什么意思?
  6. 深度比较Paxos和Raft
  7. Java String:重要到别人只能当老二的字符串类
  8. MVC3快速搭建Web应用(二)
  9. Serverless那么火,2019年的采用如何?
  10. python读取文件路径报invalid_关于Python读取文件的路径中斜杠问题
  11. GoJS 绘图 (二) :TextBlocks
  12. system.data oracleClient 需要Oracle客户端8.1.7或high
  13. 魅族android密码,魅族手机Flyme账户密码或密保忘记解决办法
  14. 微信表白神秘代码!快发给ta!
  15. 多个Excel文件独立窗口打开方式(一键解决)
  16. iphone12文件管理连接服务器,iPhone手机打开服务器功能,和Windows电脑互传文件方法...
  17. linux内核ddr初始化,嵌入式Linux裸机开发(五)——SDRAM初始化
  18. No suitable resolver
  19. 【计算机网络】中国大学MOOC哈工大国家精品课局域网部分习题
  20. 小米妙想PC端连接平板5教程

热门文章

  1. MAC OSX php dyld: Library not loaded: /usr/local/xxxx.dylib
  2. 蓝牙控制小车教程:STC89C52RC + HC-06蓝牙模块
  3. Linux的网络命令
  4. 魔兽国画水墨风格图赏:美到不行
  5. 旭日东升,霞光盈空,又是美丽一天,祈愿崭新的开始,我有新的体悟与收获。
  6. vue如何优雅的上传文件
  7. vlc 播放器的播放进度条的时间不刷新
  8. 纯HTML、CSS写一个简单的水滴特效,水滴里面可加图标
  9. Python爬虫实战基础篇
  10. python保存图片不完整_python使用matplotlib的savefig保存时图片保存不完整的问题