Aggregation Framework
- MongoDB聚合框架(Aggregation Framework)是一个计算框架,它可以:
- 作用在一个或几个集合上
- 对集合中的数据进行一系列运算
- 将这些数据转换为期望的形式
从效果而言,聚合框架相当于SQL查询中的:
整个聚合运算过程称为管道(Pipeline),它是由多个步骤(Stage)组成的,每个管道
- 接受一系列文档(原始数据)
- 每个步骤对这些文档进行一系列运算
- 结果文档输出给下一个步骤
聚合运算的基本格式
pipeline = [$stage1, $stage2,...$stageN]
db.<COLLECTION>.aggregate(
pipeline,
{ options }
)
步骤 | 作用 | SQL等价运算符 |
---|---|---|
$match | 过滤 | WHERE |
$project | 投影 | AS |
$sort | 排序 | ORDER BY |
$skip / $limit | 结果限制 | SKIP/LIMIT |
$lookup | 左外连接 | LEFT OUTER JOIN |
$group | 分组 | GROUP BY |
聚合查询实战
- _id: null(_id为null,代表没有分组,一个表作为大分组) ```javascript db.集合名称.aggregate([ {管道:{表达式}} …. ])
常用管道: $group 将集合中的文档分组,用于统计结果 $match 过滤数据,只要输出符合条件的文档 $sort 聚合数据进一步排序 $skip 跳过指定文档数 $limit 限制集合数据返回文档数 ….
常用表达式: $sum 总和 $sum:1同count表示统计 $avg 平均 $min 最小值 $max 最大值
准备: db.c3.insert({_id:1,name:”a”,sex:1,age:1}) db.c3.insert({_id:2,name:”a”,sex:1,age:2}) db.c3.insert({_id:3,name:”b”,sex:1,age:3}) db.c3.insert({_id:4,name:”c”,sex:2,age:4}) db.c3.insert({_id:5,name:”d”,sex:2,age:5})
操作: 男女生的总年龄
_id 必须加,后跟指定列
rew 求和 返回结果数
db.c3.aggregate([
{
$group:{
_id:”$sex”,
res:{$sum:”$sex”}
}
}
])
求男女总人数
db.c3.aggregate([
{
$group:{
_id:”$sex”,
res:{$sum:1}
}
}
])
求学生总数和平均年龄
db.c3.aggregate([
{
$group:{
_id:null,
res:{$sum:1},
total_avg:{$avg:”$age”}
}
}
])
查询男生女生人数,升序排序 db.c3.aggregate([ {$group:{ _id:”$sex”,res:{$sum:1}}}, {$sort:{res:1}} ]) ```
MongoDB相关链接
官方文档:https://docs.mongodb.com/manual/mongo/
中文社区:https://mongoing.com
官方中文文档:https://docs.mongoing.com
中文文档:https://www.runoob.com/mongodb/mongodb-databases-documents-collections.html