目录
一、聚合管道之$group的概述
- 一、聚合管道之$group的概述
- 二、聚合管道之$group的语法
- 三、accumulator操作符
- 四、聚合管道之$group的示例
- 4.1、数据准备
- 4.2、统计books1集合中的数量、收藏总数和平均值
- 4.3、统计books1集合中每个作者的book收藏总数
- 4.4、统计books1集合中每个作者的每本book的收藏数
- 4.5、统计books1集合中每个作者的book的type合集
- 按指定的表达式对文档进行分组,并将每个不同分组的文档输出到下一个阶段。输出文档包含一个_id字段,该字段按键包含不同的组。
- 输出文档还可以包含计算字段,该字段保存由$ group的_id字段分组的一些accumulator表达式的值。$ group不会输出具体的文档而只是统计信息。
-
$group的语法格式
{ $group: { _id: , : { : }, ... } }
-
语法格式的解释 (1)、_id字段是必填的;但是可以指定id值为null来为整个输入文档计算累计值。 (2)、剩余的计算字段是可选的,并使用< accumulator>运算符进行计算。 (3)、_id和< accumulator>表达式可以接受任何有效的表达式。
- 注:$ group阶段的内存限制为100M。默认情况下,如果stage超过此限制,$ group将产生错误。但是,要允许处理大型数据集,请将allowDiskUse选项设置为true以启用$group操作以写入临时文件。
-
准备数据集,执行脚本
var tags = ["nosql","mongodb","document","developer","popular"]; var types = ["technology","sociality","travel","novel","literature"]; var books=[]; for(var i=0;i db.books1.find()
-
统计book的数量、收藏总数和平均值
db.books1.aggregate([ {$group:{_id:null,count:{$sum:1},popCount:{$sum:"$favCount"},avgValue: {$avg:"$favCount"}}} ])
-
解释
-
统计每个作者的book收藏总数
db.books1.aggregate([ {$group:{_id:"$author.name",pop:{$sum:"$favCount"}}} ])
-
解释
-
统计每个作者的每本book的收藏数
db.books1.aggregate([ {$group:{_id:{name:"$author.name",title:"$title"},pop:{$sum:"$favCount"}}} ])
-
解释
-
统计每个作者的book的type合集
db.books1.aggregate([ {$group:{_id:"$author.name",types:{$addToSet:"$type"}}} ])
-
解释