您当前的位置: 首页 >  mongodb

小志的博客

暂无认证

  • 1浏览

    0关注

    1217博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

MongoDB——聚合管道之$group操作

小志的博客 发布时间:2022-04-23 22:49:03 ,浏览量:1

目录
    • 一、聚合管道之$group的概述
    • 二、聚合管道之$group的语法
    • 三、accumulator操作符
    • 四、聚合管道之$group的示例
      • 4.1、数据准备
      • 4.2、统计books1集合中的数量、收藏总数和平均值
      • 4.3、统计books1集合中每个作者的book收藏总数
      • 4.4、统计books1集合中每个作者的每本book的收藏数
      • 4.5、统计books1集合中每个作者的book的type合集

一、聚合管道之$group的概述
  • 按指定的表达式对文档进行分组,并将每个不同分组的文档输出到下一个阶段。输出文档包含一个_id字段,该字段按键包含不同的组。
  • 输出文档还可以包含计算字段,该字段保存由$ group的_id字段分组的一些accumulator表达式的值。$ group不会输出具体的文档而只是统计信息。
二、聚合管道之$group的语法
  • $group的语法格式

    { $group: { _id: , : {  :  }, ... } }
    
  • 语法格式的解释 (1)、_id字段是必填的;但是可以指定id值为null来为整个输入文档计算累计值。 (2)、剩余的计算字段是可选的,并使用< accumulator>运算符进行计算。 (3)、_id和< accumulator>表达式可以接受任何有效的表达式。

三、accumulator操作符 名称描述类比sql$avg计算均值avg$first返回每组第一个文档,如果有排序,按照排序,如果没有按照默认的存储的顺序的第一个文档。limit0,1$last返回每组最后一个文档,如果有排序,按照排序,如果没有按照默认的存储的顺序的最后个文档。-$max根据分组,获取集合中所有文档对应值得最大值。max$min根据分组,获取集合中所有文档对应值得最小值。min$push将指定的表达式的值添加到一个数组中。-$addToSet将表达式的值添加到一个集合中(无重复值,无序)。-$sum计算总和sum$stdDevPop返回输入值的总体标准偏差(population standard deviation)-$stdDevSamp返回输入值的样本标准偏差(the sample standard deviation)-
  • 注:$ group阶段的内存限制为100M。默认情况下,如果stage超过此限制,$ group将产生错误。但是,要允许处理大型数据集,请将allowDiskUse选项设置为true以启用$group操作以写入临时文件。
四、聚合管道之$group的示例 4.1、数据准备
  • 准备数据集,执行脚本

    var tags = ["nosql","mongodb","document","developer","popular"];
    var types = ["technology","sociality","travel","novel","literature"];
    var books=[];
    for(var i=0;i db.books1.find()
    

    在这里插入图片描述

4.2、统计books1集合中的数量、收藏总数和平均值
  • 统计book的数量、收藏总数和平均值

    db.books1.aggregate([ 
    {$group:{_id:null,count:{$sum:1},popCount:{$sum:"$favCount"},avgValue: {$avg:"$favCount"}}} 
    ])
    

    在这里插入图片描述

  • 解释 在这里插入图片描述

4.3、统计books1集合中每个作者的book收藏总数
  • 统计每个作者的book收藏总数

    db.books1.aggregate([ 
    	{$group:{_id:"$author.name",pop:{$sum:"$favCount"}}} 
    ])
    

    在这里插入图片描述

  • 解释

    在这里插入图片描述

4.4、统计books1集合中每个作者的每本book的收藏数
  • 统计每个作者的每本book的收藏数

    db.books1.aggregate([ 
    {$group:{_id:{name:"$author.name",title:"$title"},pop:{$sum:"$favCount"}}} 
    ])
    

    在这里插入图片描述

  • 解释

    在这里插入图片描述

4.5、统计books1集合中每个作者的book的type合集
  • 统计每个作者的book的type合集

    db.books1.aggregate([ 
    {$group:{_id:"$author.name",types:{$addToSet:"$type"}}} 
    ])
    

    在这里插入图片描述

  • 解释

    在这里插入图片描述

关注
打赏
1661269038
查看更多评论
立即登录/注册

微信扫码登录

0.0440s