Coursera 笔记

Module 02 · Introducing MongoDB: An Open-Source NoSQL Database

Aggregation FrameworkMongoDB 聚合框架

Coursera ↗

欢迎观看关于 MongoDB 聚合框架 的介绍视频。通过本视频,您将能够:

  • 解释 MongoDB 中的聚合框架是什么,
  • 描述聚合框架的构建方式,
  • 列举一些常用的聚合阶段,并描述何时可以使用聚合框架。

 什么是聚合框架?

聚合框架(也称为聚合管道)是 MongoDB 中处理数据的一系列操作。这些操作可以帮助您对数据进行复杂的计算、分组、过滤和排序,以获得所需的结果。

例如,假设您想了解学生在 2020 年的平均成绩,并按课程进行组织。为了获取这一信息,您需要执行以下步骤:

  1. 过滤出 2020 年的数据。
  2. 按 courseId 进行分组。
  3. 计算每个课程的平均成绩。

 聚合框架的构建方式

聚合框架的核心是“管道”,它将文档从一个阶段传递到下一个阶段。在每个阶段,数据都会经过一定的处理,最终以所需的格式输出。

示例:计算 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" } }
])


 聚合框架的应用场景

聚合框架适用于需要对数据进行深入分析和处理的任务。常见的使用场景包括:

  1. 报告与分析:如学生成绩分析、课程进展追踪等。
  2. 电子商务分析:如按国家计算产品的平均销售额。
  3. 数据汇总与计算:进行复杂的计算、分组、聚合等操作,以提供数据的多维度视角。

 总结

通过本视频,您学习了:

  • 聚合框架 是 MongoDB 用于处理数据的强大工具,可以帮助您执行复杂的分析和计算。
  • 聚合框架是由多个 阶段 组成,如 $match、$group、$project、$sort 等。
  • 使用 $merge,您可以将聚合结果保存到另一个集合中。
  • 聚合框架适用于报告、分析、数据计算和多维度视角的创建。