# MongoDB管道可以将多个操作依次执行,并将上一次执行的结果传递给下一个管道表达式
# 语法:
# db.collection_name.aggregate({管道:{表达式}}, {管道:{表达式}}, {管道:{表达式}}...)
# 管道:
# $group , 对数据进行分组
# $match , 对数据进行匹配
# $project , 对数据进行修改结构,重命名等
# $sort , 将数据进行顺序
# $limit , 提取固定数量的数据
# $skip , 跳过指定数量的顺序
# 表达式:
# $sum , 求和
# $avg , 计算平均值
# $min , 最小值
# $max , 最大值
# $push , 在结果中插入值到一个数组中
# 案例:
# 1 db.stu.aggregate({$group:{_id:'$gender'}}) 根据性别进行分组
# 2 db.stu.aggregate({$group:{_id:'$gender', cou:{$sum:1}}}) 统计男生和女生的数量
# 3 db.stu.aggregate({$group:{_id:'$gender', cou:{$sum:1}, avg_score:{$avg: '$score'}, max_score:{$max:'$score'}}}) 统计男生和女生的数量,平均成绩以及最高分
# 关于push,我们希望得到的结果是这样的:我想拿到分组后的人员名单,此时就可以用$push将名称字段整理到一个列表中
# 1 db.stu.aggregate({$group:{_id:'$gender', cou:{$sum:1}, avg_score:{$avg:'$score'}, max_score:{$max:'$score'}, name_list:{$push:'$name'}}})