微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

MongoDB聚合(aggregate)

一、基础

1、什么是聚合?

聚合是基于数据处理的聚合管道,每个文档通过一个有多个阶段(stage)组成的管道
可以对每个阶段的管道进行分组、过滤等功能,然后经过一系列的处理,输出相应的结果

db.集合名称.aggregate({管道: {表达式}})

有点像Django中ORM聚合的语法

2、常用管道

$group: 将集合中的文档分组,用于统计结果
$match: 过滤数据,只输出符合条件的文档
$project: 修改输入文档的结构,如重命名增加删除字段、创建计算结果

$sort: 将输入文档排序后输出
$limit: 限制聚合管道返回的文档数
$skip: 跳过指定数量的文档,并返回余下的文档
$unwind(): 将列表(数组)类型的字段进行拆分

3、常用表达式

处理输入文档,并输出
语法: 表达式:'$列名'
常用表达式
$sum: 计算总和, $sum:1 表示以一倍计数
$avg: 计数平均值
$min: 获取最小值
$max: 获取最大值
$push: 在结果文档中插入值到一个数组中
$first: 根据资源文档的排序获取一个文档数据
$last: 根据资源文档的排序获取最后一个文档数据

二、常用管道用法

1、$group

作用: 将集合中的文档分组,可用于统计结果
_id表示分组的依据,使用某个字段的格式为'$字段'
格式
db.集合名称.aggregate({$group:{ _id: '$字段', 自定义字段: {表达式: '$字段'}}})

db.stu.aggregate({$group: {_id: '$gender'}})
db.stu.aggregate({$group: {_id: '$gender', count: {$sum: 1}}})
db.stu.aggregate({$group: {_id: '$gender', avg_age: {$avg: '$age'}}})
db.stu.aggregate({$group: {_id: '$hometown', min_age: {$min: '$age'}, count: {$sum: 1}}})

注意: 
    _id后面的值,表示按照什么分组,格式'$字段'
    count, avg_count是自定义的字段
    表达式的值是'$字段'

Group by null

将集合中所用文档分为一组,即该集合就是一个组
# 求学生的总量和平均年龄
db.stu.aggregate({$group: {_id: null, count:{$sum: 1}, avg_age:{$avg: '$age'}}})

 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐