聚合管道入门
聚合管道是一个功能强大的工具,支持开发人员对其集合执行高级数据分析和操作。 管道是一系列数据处理操作,这些操作在输入文档中执行以生成计算输出。 管道阶段处理输入文档并将结果传递到下一阶段。 每个阶段对数据执行特定的操作,例如筛选、分组、排序和转换。
基本语法
聚合管道的基本语法如下:
db.collection.aggregate([ { stage1 }, { stage2 }, ... { stageN }])
其中,db.collection 是要对其执行聚合的 MongoDB 集合,stage1、stage2、...、stageN 是要应用的管道阶段。
示例阶段
Cosmos DB for MongoDB 提供了可在管道中使用的各种阶段,包括:
- $match:筛选文档,仅传递符合指定条件的文档。
- $project:通过添加、删除或更新字段将文档转换为新形式。
- $group:按一个或多个字段对文档进行分组,并对分组数据执行各种聚合函数。
- $sort:根据指定字段对文档进行排序。
- $skip:跳过指定数量的文档。
- $limit:限制传递给下一阶段的文档数。
- $unwind:从输入文档中解构一个数组字段,为每个元素输出一个文档。
若要查看所有可用阶段,请参阅支持的功能
示例
以下是有关如何使用聚合管道对数据执行各种操作的一些示例:
筛选:若要筛选“quantity”字段大于 20 的文档,可以使用以下管道:
db.collection.aggregate([
{ $match: { quantity: { $gt: 20 } } }
])
分组:若要按“category”字段对文档进行分组并计算每个组的总“quantity”,可以使用以下管道:
db.collection.aggregate([
{ $group: { _id: "$category", totalQuantity: { $sum: "$quantity" } } }
])
排序:若要按“price”字段降序排列文档,可以使用以下管道:
db.collection.aggregate([
{ $sort: { price: -1 } }
])
转换:若要向“price”大于 100 的文档添加新字段“discount”,可以使用以下管道:
db.collection.aggregate([
{ $project: { item: 1, price: 1, discount: { $cond: [{ $gt: ["$price", 100] }, 10, 0 ] } } }
])
展开:若要将所有子文档与数组字段“tags”分开并为每个值创建一个新文档,可以使用以下管道:
db.collection.aggregate([
{ $unwind: "$tags" }
])
具有多个阶段的示例
db.sales.aggregate([
{ $match: { date: { $gte: "2021-01-01", $lt: "2021-03-01" } } },
{ $group: { _id: "$category", totalSales: { $sum: "$sales" } } },
{ $sort: { totalSales: -1 } },
{ $limit: 5 }
])
在此示例中,我们使用一个名为“sales”的示例集合,其中包含具有以下字段的文档:“date”、“category”和“sales”。
第一阶段 { $match: { date: { $gte: "2021-01-01", $lt: "2021-03-01" } } } 按“date”字段筛选文档,仅传递日期在 2021 年 1 月 1 日至 2021 年 2 月 28 日之间的文档。 我们使用的是“YYYY-MM-DD”格式的字符串日期格式。
第二阶段 { $group: { _id: "$category", totalSales: { $sum: "$sales" } } } 按“category”字段对文档进行分组,并计算每个组的总销售额。
第三阶段 { $sort: { totalSales: -1 } } 根据“totalSales”字段对文档进行降序排序。
第四阶段 { $limit: 5 } 将传递给下一阶段的文档数限制为仅前 5 个。
因此,管道将返回指定日期范围内总销售额排名前 5 的类别。
后续步骤
- 了解如何将 Studio 3T 与 Azure Cosmos DB for MongoDB 配合使用。
- 了解如何将 Robo 3T 与 Azure Cosmos DB for MongoDB 配合使用。
- 使用 Azure Cosmos DB for MongoDB 浏览 MongoDB 示例。
- 尝试为迁移到 Azure Cosmos DB 进行容量计划? 可以使用有关现有数据库群集的信息进行容量规划。
- 如果你只知道现有数据库群集中的 vCore 和服务器数量,请阅读根据 vCore 或 vCPU 数量估算请求单位数。
- 如果你知道当前数据库工作负载的典型请求速率,请阅读使用 Azure Cosmos DB 容量规划工具估算请求单位。