·更新于 2026年4月21日· 62 次浏览 MongoDB聚合
MongoDB 聚合管道:$match 前置与 $lookup 成本
管道阶段顺序如何影响中间文档体积;`$lookup` 与嵌套子管道的性能陷阱;`$facet` 的典型用途。
作者
ZHOU YI
聚合管道按阶段顺序执行,尽量先用 $match、$project 削减文档数量与字段,再进入 $group、$lookup 等重阶段。
js
db.orders.aggregate([
{ $match: { createdAt: { $gte: ISODate('2025-01-01') } } },
{ $group: { _id: '$userId', total: { $sum: '$amount' } } },
{ $sort: { total: -1 } },
{ $limit: 100 }
])$lookup 注意
左连接会放大结果集;若被连接集合很大,确保外键有索引,并评估是否可用冗余字段或物化视图替代实时 join。
- 允许磁盘溢出时关注
allowDiskUse与内存配额 - 用
explain观察SORT是否内存排序超限