关于mongoDB的聚合操作_aggregate()归纳详解

 更新时间:2023年07月07日 10:40:01   作者:侯小啾  
这篇文章主要介绍了关于mongoDB的聚合操作_aggregate()归纳详解,关系是关联关系的一种,是强的关联关系,聚合是整体和个体之间的关系,聚合关系也是通过实例变量实现的。在聚合关系中,两个类是处在不平等层次上的,一个代表整体,另一个代表部分,需要的朋友可以参考下
(福利推荐:【腾讯云】服务器最新限时优惠活动,云服务器1核2G仅99元/年、2核4G仅768元/3年,立即抢购>>>:9i0i.cn/qcloud

(福利推荐:你还在原价购买阿里云服务器?现在阿里云0.8折限时抢购活动来啦!4核8G企业云服务器仅2998元/3年,立即抢购>>>:9i0i.cn/aliyun

mongoDB聚合操作

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()归纳详解的文章就介绍到这了,更多相关mongoDB的聚合操作内容请搜索程序员之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持程序员之家!

相关文章

  • MongoDB学习笔记之分组(group)使用示例

    MongoDB学习笔记之分组(group)使用示例

    这篇文章主要介绍了MongoDB学习笔记之分组(group)使用示例,本文直接给出一组测试数据,然后练习分组的基本使用,需要的朋友可以参考下
    2015-07-07
  • Mongodb 删除添加分片与非分片表维护

    Mongodb 删除添加分片与非分片表维护

    MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。通过本文给大家介绍Mongodb 删除添加分片与非分片表维护的相关知识,对此文感兴趣的朋友一起学习吧
    2016-01-01
  • 关于MongoDB数据库核心概念

    关于MongoDB数据库核心概念

    这篇文章主要介绍了关于MongoDB数据库核心概念,MongoDB由C++语言编写,是一个基于分布式文件存储的开源数据库系统,需要的朋友可以参考下
    2023-04-04
  • MongoDB的基础查询和索引操作方法总结

    MongoDB的基础查询和索引操作方法总结

    MongoDB使用JavaScript作为shell脚本,可以代替关系型数据库中的SQL语句完成查询操作,包括索引下的查询操作,这里我们就来整理MongoDB的基础查询和索引操作方法总结:
    2016-07-07
  • MongoDB入门教程之聚合和游标操作介绍

    MongoDB入门教程之聚合和游标操作介绍

    这篇文章主要介绍了MongoDB入门教程之聚合和游标操作介绍,聚合和游标可以说是MongoDB中的高级操作了,需要的朋友可以参考下
    2014-08-08
  • MongoDB中的加减乘除运算详解

    MongoDB中的加减乘除运算详解

    这篇文章主要给大家介绍了关于MongoDB中加减乘除运算的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-01-01
  • MongoDB分片键的选择和案例实例详解

    MongoDB分片键的选择和案例实例详解

    分片集群中良好的查询性能都依赖于正确选择分片键。下面这篇文章主要给大家介绍了关于MongoDB分片键的选择和案例的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧
    2018-05-05
  • mongoDB4.0数据库的操作方法

    mongoDB4.0数据库的操作方法

    这篇文章主要介绍了mongoDB4.0数据库的操作方法及注意事项,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-10-10
  • cgroup限制mongodb进程内存大小

    cgroup限制mongodb进程内存大小

    这篇文章主要介绍了cgroup限制mongodb进程内存大小,需要的朋友可以参考下
    2014-07-07
  • MongoDB通过查询与游标彻底玩转分布式文件存储

    MongoDB通过查询与游标彻底玩转分布式文件存储

    MongoDB最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引,这篇文章主要介绍了MongoDB查询与游标,彻底玩转分布式文件存储,需要的朋友可以参考下
    2023-01-01

最新评论

?


http://www.vxiaotou.com