Appearance
MongoDB 聚合
aggregate 聚合管道
聚合通过管道处理文档:每个阶段对输入文档做变换,输出给下一阶段。
javascript
db.orders.aggregate([
{ $match: { status: "completed" } },
{ $group: { _id: "$userId", total: { $sum: "$amount" } } },
{ $sort: { total: -1 } },
{ $limit: 10 }
])常用阶段
| 阶段 | 说明 |
|---|---|
| $match | 过滤文档,类似 find 条件 |
| $group | 按字段分组并做聚合计算 |
| $sort | 排序 |
| $limit / $skip | 限制/跳过条数 |
| $project | 投影、重命名字段、计算字段 |
| $lookup | 与另一集合做“连接” |
| $unwind | 将数组展开为多条文档 |
| $count | 统计文档数 |
聚合表达式示例
javascript
// 按 status 分组,统计数量与金额总和
db.orders.aggregate([
{ $group: {
_id: "$status",
count: { $sum: 1 },
totalAmount: { $sum: "$amount" }
}}
])javascript
// 先 match 再 group 再 sort
db.orders.aggregate([
{ $match: { createdAt: { $gte: ISODate("2024-01-01") } } },
{ $group: { _id: "$userId", total: { $sum: "$amount" } } },
{ $sort: { total: -1 } }
])更多阶段与表达式见官方 Aggregation Pipeline。下一节介绍 MongoDB 复制(副本集)。