Skip to content

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 复制(副本集)