聚合管道aggregate
- aggregate介绍
MongoDB的聚合管道将MongoDB文档在一个管道处理完毕后将结果传递给下一个管道处理。管道操作是可以重复的。管道在Unix和Linux中一般用于将当前命令的输出结果作为下一个命令的参数。
aggregation 它是数据聚合的一个新框架,其概念类似于数据处理的管道。 每个文档通过一个由多个节点组成的管道,每个节点有自己特殊的功能(分组、过滤等),文档经过管道处理后,最后输出相应的结果。管道基本的功能有两个:
一是对文档进行“过滤”,也就是筛选出符合条件的文档
二是对文档进行“变换”,也就是改变文档的输出形式
其他的一些功能还包括按照某个指定的字段分组和排序等。而且在每个阶段还可以使用表达式操作符计算平均值和拼接字符串等相关操作。管道提供了一个MapReduce 的替代方案,MapReduce使用相对来说比较复杂,而管道的拥有固定的接口(操作符表达),使用比较简单,对于大多数的聚合任务管道一般来说是首选方法。
- 管道操作符介绍
$project:包含、排除、重命名和显示字段
$match:查询,需要同find()一样的参数
$limit:限制结果数量
$skip:忽略结果的数量
$sort:按照给定的字段排序结果
$group:按照给定表达式组合结果
$unwind:分割嵌入数组到自己顶层文件
$geoNear:返回基于接近地理空间点的有序的文档流
- 组聚合操作符介绍
$addToSet:返回在该组中的每个文档所选择的字段的所有唯一值的数组
$first:返回组中的第一个值
$last:返回组中的最后一个值
$max:返回组中的最大值
$min:返回组中的最小值
$avg:返回组中的平均值
$push:返回在该组中的每个文档所选择的字段的所有值的数组
$sum:返回组中的汇总值
#使用管道可以将多种不同的聚合统计记录同时返回
db.person.aggregate([{$group:{
_id:"$name",
count:{$sum:1},
total:{$sum:"$age"},
max:{$max:"$age"},
min:{$min:"$age"},
avg:{$avg:"$age"}
}}])
{ "_id" : "jason", "count" : 2, "total" : 58, "max" : 30, "min" : 28, "avg" : 29}
{ "_id" : "lorraine", "count" : 2, "total" : 47, "max" : 25, "min" : 22, "avg" :23.5 }