$switch(多分支条件)
最后更新:2026-10-09
$switch(多分支条件)
$switch 按顺序求值多个 case 分支,返回第一个条件为真的 then 结果,类似编程语言的 switch-case。所有分支都不满足时返回 default;default 未提供且无分支命中会报错。典型场景包括把订单状态码映射为文字标签、按评分区间分级。case 按真值规则判定。与嵌套 $cond 相比,$switch 可读性更好、分支数量不限。
| 分类 | 集合·条件·转换 |
|---|---|
| MongoDB 版本 | 1.0+ |
| 示例语言 | mongosh (Shell) |
📝 语法
{ $switch: { branches: [ { case: <条件>, then: <结果> }, ... ], default: <默认值> } }
⚙️ 参数
| branches | 分支数组,每项包含 case 条件和 then 结果。 |
|---|---|
| default | 可选,所有 case 都不满足时返回的值。 |
返回值:第一个为真的 case 对应的 then;都不满足时返回 default
▶ 示例
请在本地安装的 mongosh 中执行以下命令(需已启动 mongod):
// $switch:按金额分档
db.orders.aggregate([
{ $project: {
tier: { $switch: { branches: [
{ case: { $gte: ['$amount', 1000] }, then: 'gold' },
{ case: { $gte: ['$amount', 100] }, then: 'silver' }
], default: 'bronze' } }
} }
])
运行结果:
{ '_id': 1, 'tier': 'silver' }
{ '_id': 2, 'tier': 'bronze' }
📌 注意事项
- 分支按顺序求值,命中第一个为真的分支后停止
- default 缺失且无分支命中会直接报错,生产环境务必提供
- case 按真值规则判定,非布尔表达式也可用
🏷️ 相关标签
💡 相关案例
更多实战案例即将上线,敬请期待。
📚 相关教程
❓ 常见问题
Q所有分支都不满足会怎样?
A返回 default;default 缺失时报错,建议总是提供。
Q和嵌套 $cond 比哪个好?
A分支多时 $switch 可读性更好,逻辑扁平。
Qcase 条件会全部求值吗?
A不会,按顺序短路,命中即止。