📅  最后修改于: 2023-12-03 15:03:02.093000             🧑  作者: Mango
在 MongoDB 中,聚合是指对数据集进行计算和组合以生成结果(类似于 SQL 中的 GROUP BY 语句)。聚合框架是 MongoDB 查询语言的一部分,它允许用户使用内置运算符对文档进行分组,过滤和投影操作。
最常用的聚合工具是聚合管道(aggregation pipeline),它是一种将多个聚合步骤串联在一起形成的管道,每个步骤都将产生一个文档集合作为输出,供下一步骤使用。MongoDB 支持以下聚合操作符:
$match
:过滤文档,类似于 find
方法。$group
:将文档按照某个字段进行分组,然后对每组进行计算。$project
:与 find
方法中的投影参数相同,用于选择要返回的字段。$sort
:对文档进行排序。$limit
:限制输出的文档数目。$skip
:跳过指定数目的文档。以下是一个示例聚合管道:
// 对 orders 集合进行聚合
db.orders.aggregate([
// 过滤出 status 为 "complete" 的文档
{ $match: { status: "complete" } },
// 按照 owner 字段进行分组
{ $group: { _id: "$owner", total: { $sum: "$amount" } } },
// 进行投影操作,只保留 owner 和 total 字段
{ $project: { _id: 0, owner: "$_id", total: 1 } },
// 对 total 字段进行排序
{ $sort: { total: -1 } },
// 限制输出的文档数目为 10
{ $limit: 10 }
])
MongoDB 还提供了一些聚合函数,用于对文档进行计算。聚合函数分为以下几类:
$sum
,用于对一组文档中的某个字段进行求和计算。$sqrt
,用于对数值字段进行数学运算。$substr
,用于对字符串字段进行操作。$year
,用于对日期字段进行操作。以下是一些常见的聚合函数示例:
统计 orders 集合中的文档数:
db.orders.count()
计算 orders 集合中 amount
字段的平均值:
db.orders.aggregate([
{ $group: { _id: null, avgAmount: { $avg: "$amount" } } }
])
对 orders 集合中的 amount
字段进行求和计算:
db.orders.aggregate([
{ $group: { _id: null, totalAmount: { $sum: "$amount" } } }
])
统计 orders 集合中 status
字段的不同值:
db.orders.aggregate([
{ $group: { _id: "$status", count: { $sum: 1 } } }
])
MongoDB 的聚合工具可以帮助我们轻松地对文档进行聚合操作,支持多种聚合操作符和聚合函数。在实际应用中,可以根据具体业务场景选择合适的聚合方式,以提升数据分析和查询效率。