Aggregation Framework

  • MongoDB聚合框架(Aggregation Framework)是一个计算框架,它可以:
    • 作用在一个或几个集合上
    • 对集合中的数据进行一系列运算
    • 将这些数据转换为期望的形式
  • 从效果而言,聚合框架相当于SQL查询中的:

    • GROUP BY
    • LEFT OUTER JOIN
    • AS等

      管道(Pipeline)和步骤(Stage)

  • 整个聚合运算过程称为管道(Pipeline),它是由多个步骤(Stage)组成的,每个管道

    • 接受一系列文档(原始数据)
    • 每个步骤对这些文档进行一系列运算
    • 结果文档输出给下一个步骤

image.png

聚合运算的基本格式

  1. pipeline = [$stage1, $stage2,...$stageN]
  2. db.<COLLECTION>.aggregate(
  3. pipeline,
  4. { options }
  5. )
步骤 作用 SQL等价运算符
$match 过滤 WHERE
$project 投影 AS
$sort 排序 ORDER BY
$skip / $limit 结果限制 SKIP/LIMIT
$lookup 左外连接 LEFT OUTER JOIN
$group 分组 GROUP BY

聚合查询实战

  1. _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