目录
MongoDB 聚合概述
MongoDB 的聚合框架是处理数据的强大工具,它能够执行复杂的数据处理操作,如过滤、分组、排序等,生成用于报告、统计或数据分析的汇总信息。通过聚合,用户可以对数据集进行各种计算、变换、汇总等操作,从而返回需要的结果。
在 MongoDB 中,聚合通常通过管道(pipeline)进行。聚合管道是一系列操作步骤,每个步骤对数据进行处理,最终返回结果。
聚合管道
MongoDB 聚合管道允许通过一系列的阶段来处理文档。每个阶段接收输入并输出一个经过变换的文档。管道中的每个阶段都可以执行不同的操作,如筛选、排序、分组等。
管道的每个阶段通过 JSON 对象指定,并通过逗号分隔。例如:
db.collection.aggregate([
{ $match: { status: "A" } },
{ $group: { _id: "$age", total: { $sum: 1 } } }
])
在这个示例中,第一个阶段 $match
过滤了文档,选择了 status
为 “A” 的文档;第二个阶段 $group
按 age
字段分组,并计算每个组中的文档总数。
常用的聚合操作符
- $match:过滤数据,类似于
find()
查询中的查询条件。{ $match: { status: "A" } }
- $group:将文档分组并执行聚合操作(如计数、求和等)。
{ $group: { _id: "$age", total: { $sum: 1 } } }
- $project:通过包含或排除字段,重塑每个文档。
{ $project: { name: 1, age: 1 } }
- $sort:对结果进行排序。
{ $sort: { age: -1 } }
- $limit:限制返回的文档数量。
{ $limit: 5 }
- $skip:跳过指定数量的文档。
{ $skip: 10 }
- $unwind:将数组拆解为多个文档。
{ $unwind: "$tags" }
- $addFields:向文档添加新字段。
{ $addFields: { total: { $sum: ["$price", "$tax"] } } }
聚合管道阶段
一个聚合管道由多个阶段组成,每个阶段都执行不同的操作。管道阶段的顺序很重要,通常是从数据的最初筛选开始,逐步进行各种操作。
常见的管道阶段包括:
- $match:用于选择符合特定条件的文档。
- $group:用于将文档分组,执行聚合操作。
- $sort:对结果进行排序。
- $limit:限制返回的结果数量。
- $skip:跳过指定数量的文档。
- $project:重塑文档,控制输出字段。
示例
- 聚合示例 1:查询每个年龄段的总人数
db.users.aggregate([
{ $group: { _id: "$age", total: { $sum: 1 } } }
])
这个聚合操作会将 users
集合中的文档按 age
字段进行分组,并计算每个年龄段的总人数。
- 聚合示例 2:查询某个字段的最大值和最小值
db.sales.aggregate([
{ $group: { _id: null, maxPrice: { $max: "$price" }, minPrice: { $min: "$price" } } }
])
这个聚合操作会查找 sales
集合中 price
字段的最大值和最小值。
- 聚合示例 3:根据条件筛选并排序
db.orders.aggregate([
{ $match: { status: "shipped" } },
{ $sort: { orderDate: -1 } }
])
这个聚合操作会筛选出状态为 “shipped” 的订单,并按 orderDate
字段进行降序排序。
参考资料
如需更多帮助或信息,请访问 www.52kanjuqing.com。
发表回复