$cond(条件分支)
最后更新:2026-10-09
$cond(条件分支)
$cond 实现 if-then-else 三目逻辑,是聚合表达式里最基础的分支操作符。支持对象形式 { if, then, else } 和数组形式 [ 条件, 真值结果, 假值结果 ],两种写法等价。典型场景包括根据金额计算运费档位、把状态码映射为文字标签。条件按真值规则判定,非布尔值也可用。多分支场景用 $switch 更清晰。
| 分类 | 集合·条件·转换 |
|---|---|
| MongoDB 版本 | 1.0+ |
| 示例语言 | mongosh (Shell) |
📝 语法
{ $cond: { if: <条件>, then: <结果1>, else: <结果2> } } 或 { $cond: [ <条件>, <结果1>, <结果2> ] }
⚙️ 参数
| if/条件 | 决定分支的表达式,按真值规则判定。 |
|---|---|
| then/结果1 | 条件为真时返回的结果。 |
| else/结果2 | 条件为假时返回的结果。 |
返回值:条件为真返回结果1,否则返回结果2
▶ 示例
请在本地安装的 mongosh 中执行以下命令(需已启动 mongod):
// $cond:金额大于 100 视为大单
db.orders.aggregate([
{ $project: {
level: { $cond: { if: { $gt: ['$amount', 100] }, then: 'big', else: 'small' } }
} }
])
运行结果:
{ '_id': 1, 'level': 'big' }
{ '_id': 2, 'level': 'small' }
📌 注意事项
- 对象形式和数组形式等价,可随意混用
- else 是必填项,不能省略
- 分支超过两个时用 $switch 可读性更好
🏷️ 相关标签
💡 相关案例
更多实战案例即将上线,敬请期待。
📚 相关教程
❓ 常见问题
Q条件可以不是布尔吗?
A可以,按真值规则判定,0、null、空字符串为假。
Q数组形式和对象形式有什么区别?
A没有,语义完全一样,只是写法不同。
Q多个分支怎么处理?
A用 $switch,按顺序匹配第一个为真的分支。