目录

  1. MongoDB 聚合概述
  2. 聚合管道
  3. 常用的聚合操作符
  4. 聚合管道阶段
  5. 示例
  6. 参考资料

MongoDB 聚合概述

MongoDB 的聚合框架是处理数据的强大工具,它能够执行复杂的数据处理操作,如过滤、分组、排序等,生成用于报告、统计或数据分析的汇总信息。通过聚合,用户可以对数据集进行各种计算、变换、汇总等操作,从而返回需要的结果。

在 MongoDB 中,聚合通常通过管道(pipeline)进行。聚合管道是一系列操作步骤,每个步骤对数据进行处理,最终返回结果。


聚合管道

MongoDB 聚合管道允许通过一系列的阶段来处理文档。每个阶段接收输入并输出一个经过变换的文档。管道中的每个阶段都可以执行不同的操作,如筛选、排序、分组等。

管道的每个阶段通过 JSON 对象指定,并通过逗号分隔。例如:

db.collection.aggregate([
  { $match: { status: "A" } },
  { $group: { _id: "$age", total: { $sum: 1 } } }
])

在这个示例中,第一个阶段 $match 过滤了文档,选择了 status 为 “A” 的文档;第二个阶段 $groupage 字段分组,并计算每个组中的文档总数。


常用的聚合操作符

  1. $match:过滤数据,类似于 find() 查询中的查询条件。 { $match: { status: "A" } }
  2. $group:将文档分组并执行聚合操作(如计数、求和等)。 { $group: { _id: "$age", total: { $sum: 1 } } }
  3. $project:通过包含或排除字段,重塑每个文档。 { $project: { name: 1, age: 1 } }
  4. $sort:对结果进行排序。 { $sort: { age: -1 } }
  5. $limit:限制返回的文档数量。 { $limit: 5 }
  6. $skip:跳过指定数量的文档。 { $skip: 10 }
  7. $unwind:将数组拆解为多个文档。 { $unwind: "$tags" }
  8. $addFields:向文档添加新字段。 { $addFields: { total: { $sum: ["$price", "$tax"] } } }

聚合管道阶段

一个聚合管道由多个阶段组成,每个阶段都执行不同的操作。管道阶段的顺序很重要,通常是从数据的最初筛选开始,逐步进行各种操作。

常见的管道阶段包括:

  • $match:用于选择符合特定条件的文档。
  • $group:用于将文档分组,执行聚合操作。
  • $sort:对结果进行排序。
  • $limit:限制返回的结果数量。
  • $skip:跳过指定数量的文档。
  • $project:重塑文档,控制输出字段。

示例

  1. 聚合示例 1:查询每个年龄段的总人数
db.users.aggregate([
  { $group: { _id: "$age", total: { $sum: 1 } } }
])

这个聚合操作会将 users 集合中的文档按 age 字段进行分组,并计算每个年龄段的总人数。

  1. 聚合示例 2:查询某个字段的最大值和最小值
db.sales.aggregate([
  { $group: { _id: null, maxPrice: { $max: "$price" }, minPrice: { $min: "$price" } } }
])

这个聚合操作会查找 sales 集合中 price 字段的最大值和最小值。

  1. 聚合示例 3:根据条件筛选并排序
db.orders.aggregate([
  { $match: { status: "shipped" } },
  { $sort: { orderDate: -1 } }
])

这个聚合操作会筛选出状态为 “shipped” 的订单,并按 orderDate 字段进行降序排序。


参考资料


如需更多帮助或信息,请访问 www.52kanjuqing.com