MongoDB Aggregation Pipeline 常用 Stage 速查

1. 过滤 + 限制(最基础)

操作符 用途 类似 SQL
$match 过滤文档,只保留符合条件的 WHERE
$limit 只取前 N 条 LIMIT N
$skip 跳过前 N 条 OFFSET N
$sample 随机抽样 N 条 -

2. 排序

操作符 用途 类似 SQL
$sort 排序,1 升序,-1 降序 ORDER BY

3. 字段处理(投影)

操作符 用途 类似 SQL
$project 选择/重命名/计算字段 SELECT
$addFields 新增字段(保留原字段) -
$unset 删除字段 -
$replaceRoot 用指定字段替换整条文档 -

4. 分组统计(最核心)

操作符 用途 类似 SQL
$group 按字段分组,聚合计算 GROUP BY
$bucket 按范围分桶(如年龄分段) -
$facet 一次聚合出多个维度结果 -
$count 计数 COUNT(*)

$group 内置聚合函数

函数 用途 类似 SQL
$sum 求和 SUM()
$avg 平均值 AVG()
$min / $max 最小/最大值 MIN() / MAX()
$first / $last 取第一个/最后一个值 -
$push 聚合成数组 GROUP_CONCAT()
$addToSet 聚合成不重复数组 -

5. 联表

操作符 用途 类似 SQL
$lookup 左连接(最常用) LEFT JOIN
$graphLookup 递归查询(图/树结构) WITH RECURSIVE
$unionWith 合并两个管道结果 UNION

6. 数组处理

操作符 用途
$unwind 展开数组,每个元素变一条文档
$arrayElemAt 取数组第 N 个元素
$slice 数组切片(取前 N 个)
$size 数组长度
$filter 过滤数组元素
$map 数组映射转换
$reduce 数组归约(累加)

7. 条件判断

操作符 用途 类似
$cond if-else CASE WHEN
$switch 多条件分支 CASE WHEN ... ELSE
$ifNull 空值替换 COALESCE()

8. 字符串 / 日期处理

操作符 用途
$concat 拼接字符串
$substr / $substrBytes 截取字符串
$toUpper / $toLower 大小写转换
$trim 去空格
$split 字符串拆分数组
$dateToString 日期转字符串
$dateDiff 日期差值
$add / $subtract 日期加减

9. 输出

操作符 用途
$out 结果写入新集合(覆盖)
$merge 结果合并到已有集合
$geoNear 地理位置查询

实际组合示例

python 复制代码
pipeline = [
    {"$match": {"status": "active"}},        # 过滤
    {"$sort": {"created_at": -1}},           # 排序
    {"$skip": 0},                            # 跳过 0 条
    {"$limit": 10},                          # 取 10 条
    {"$lookup": {                            # 联表
        "from": "orders",
        "localField": "_id",
        "foreignField": "user_id",
        "as": "orders"
    }},
    {"$unwind": "$orders"},                  # 展开数组
    {"$group": {                             # 分组统计
        "_id": "$city",
        "total": {"$sum": "$amount"},
        "count": {"$sum": 1}
    }},
    {"$sort": {"total": -1}},                # 再排序
    {"$project": {                           # 投影
        "city": "$_id",
        "total": 1,
        "_id": 0
    }},
]

记忆优先级

优先级 必须掌握
⭐⭐⭐ $match $sort $limit $project $group $lookup
⭐⭐ $unwind $addFields $cond $count
$bucket $facet $sample $out $merge

80% 的场景用前 6 个就够了。

相关推荐
jllllyuz1 小时前
STM8S 系列单片机 + RC522读写 IC 卡
单片机·嵌入式硬件·mongodb
Bingorl1 小时前
机器学习之决策树算法
算法·决策树·机器学习
霖霖总总1 小时前
[MongoDB小技巧02] 掌握 MongoDB 基础:容器化部署、默认配置与 mongosh 核心命令全解析
数据库·mongodb
2501_915106321 小时前
深入解析HTTPS抓包原理、中间人攻击及反抓包技术攻防
数据库·网络协议·ios·小程序·https·uni-app·iphone
迷枫7121 小时前
DM8 数据共享集群 DSC 学习总结:共享存储、集群组件与常见误区
数据库·学习
qingyulee1 小时前
线性回归、决策树
人工智能·算法·线性回归
rising start1 小时前
Redis基础入门
数据库·redis·缓存
Zhang~Ling1 小时前
C++ 继承机制详解下:多继承、虚继承与菱形继承底层原理
开发语言·c++·算法
码不停蹄的玄黓1 小时前
MySQL索引类型
数据库·mysql