全书目录

第十九篇:MongoDB 完全指南 —— 弹性档案仓宇宙

第十章:聚合管道 —— 档案流水线加工厂

1 分钟 256 字 第 361 / 962 个阅读单元

如果普通查询是在“找档案”,那聚合就是“把档案送上加工流水线”。

MongoDB 的聚合管道像这样工作:

text
原始文档
   |
   v
$match   先筛选
   |
   v
$project 只保留需要字段
   |
   v
$unwind  拆开数组
   |
   v
$group   分组统计
   |
   v
$sort    排序
   |
   v
结果输出

假设要统计每个商品卖了多少件:

javascript
db.orders.aggregate([
  { $match: { status: "paid" } },
  { $unwind: "$items" },
  {
    $group: {
      _id: "$items.sku",
      totalQty: { $sum: "$items.qty" },
      totalRevenue: { $sum: { $multiply: ["$items.qty", "$items.price"] } }
    }
  },
  { $sort: { totalQty: -1 } }
])

这条流水线在做的事:

  1. 先只拿已支付订单
  2. 把每张订单里的 items 一件件拆开
  3. sku 分组
  4. 求销量和销售额
  5. 按销量倒序排列

如果你需要把引用的数据拼回来,可以用 $lookup

javascript
db.orders.aggregate([
  {
    $lookup: {
      from: "users",
      localField: "userId",
      foreignField: "_id",
      as: "userInfo"
    }
  }
])

注意一个认知点:

  • 聚合管道通常是“读并加工”
  • 它默认不修改原文档
  • 只有特定阶段才会把结果写出去

所以你可以把聚合理解为“档案分析工厂”,而不是“改档工具”。