$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' }

📌 注意事项

更多实战案例即将上线,敬请期待。

📚 相关教程

❓ 常见问题

Q所有分支都不满足会怎样?
A返回 default;default 缺失时报错,建议总是提供。
Q和嵌套 $cond 比哪个好?
A分支多时 $switch 可读性更好,逻辑扁平。
Qcase 条件会全部求值吗?
A不会,按顺序短路,命中即止。
Web-Tutorial.com

Web-Tutorial 技术团队

由多位开发者共同维护的编程教程平台。每篇教程由对应领域的开发者编写和审核,确保内容准确可靠。如发现任何问题,欢迎向我们反馈。

100%

🙏 帮我们做得更好

我们是刚上线的编程教程站,几个人的小团队,精力有限。页面虽经检查,难免还有疏漏——链接失效、排版错乱、内容有误、语言生硬……

如果您发现了,麻烦告诉我们,我们会在收到反馈后第一时间进行修复,再次感谢您的光临 🙏