Module 02 · Introducing MongoDB: An Open-Source NoSQL Database
Aggregation FrameworkMongoDB 聚合框架
欢迎观看关于 MongoDB 聚合框架 的介绍视频。通过本视频,您将能够:
- 解释 MongoDB 中的聚合框架是什么,
- 描述聚合框架的构建方式,
- 列举一些常用的聚合阶段,并描述何时可以使用聚合框架。
什么是聚合框架?
聚合框架(也称为聚合管道)是 MongoDB 中处理数据的一系列操作。这些操作可以帮助您对数据进行复杂的计算、分组、过滤和排序,以获得所需的结果。
例如,假设您想了解学生在 2020 年的平均成绩,并按课程进行组织。为了获取这一信息,您需要执行以下步骤:
- 过滤出 2020 年的数据。
- 按 courseId 进行分组。
- 计算每个课程的平均成绩。
聚合框架的构建方式
聚合框架的核心是“管道”,它将文档从一个阶段传递到下一个阶段。在每个阶段,数据都会经过一定的处理,最终以所需的格式输出。
示例:计算 2020 年学生的平均成绩
假设您有以下学生成绩数据:
{ courseId: 1, year: 2020, score: 85 }
{ courseId: 2, year: 2020, score: 92 }
{ courseId: 1, year: 2020, score: 78 }
使用$match过滤数据
首先,使用 $match 阶段过滤出 2020 年的数据:
db.courseResults.aggregate([
{ $match: { year: 2020 } }
])
使用$group按课程分组并计算平均分
接下来,使用 $group 阶段按 courseId 分组并计算每个课程的平均成绩:
db.courseResults.aggregate([
{ $match: { year: 2020 } },
{ $group: { _id: "$courseId", averageScore: { $avg: "$score" } } }
])
输出将会是每个课程的 平均成绩:
{ "_id": 1, "averageScore": 81.5 }
{ "_id": 2, "averageScore": 92 }
常用的聚合阶段
在 MongoDB 的聚合框架中,有几个常用的聚合阶段:
1.$project阶段
$project 阶段用于重塑文档,可以通过包括或排除字段来改变文档的结构。
例如,仅保留学生的 firstName 和 lastName:
db.students.aggregate([
{ $project: { firstName: 1, lastName: 1 } }
])
2.$sort阶段
$sort 阶段用于对文档按指定字段进行排序。例如,按 lastName 降序排序:
db.students.aggregate([
{ $sort: { lastName: -1 } }
])
3.$count阶段
$count 阶段用于计算结果集中的文档数。例如,计算学生总数:
db.students.aggregate([
{ $count: "totalStudents" }
])
4.$merge阶段
$merge 阶段可以将聚合的结果输出到一个新的集合中:
db.courseResults.aggregate([
{ $match: { year: 2020 } },
{ $group: { _id: "$courseId", averageScore: { $avg: "$score" } } },
{ $merge: { into: "averageScores" } }
])
聚合框架的应用场景
聚合框架适用于需要对数据进行深入分析和处理的任务。常见的使用场景包括:
- 报告与分析:如学生成绩分析、课程进展追踪等。
- 电子商务分析:如按国家计算产品的平均销售额。
- 数据汇总与计算:进行复杂的计算、分组、聚合等操作,以提供数据的多维度视角。
总结
通过本视频,您学习了:
- 聚合框架 是 MongoDB 用于处理数据的强大工具,可以帮助您执行复杂的分析和计算。
- 聚合框架是由多个 阶段 组成,如
$match、$group、$project、$sort等。 - 使用
$merge,您可以将聚合结果保存到另一个集合中。 - 聚合框架适用于报告、分析、数据计算和多维度视角的创建。