$cmp(比较)
最后更新:2026-10-09
$cmp(比较)
$cmp比较两个值,返回-1、0或1,分别表示小于、等于、大于。它是表达式版的比较操作符,常用于$sort字段的自定义排序、$cond中的大小判断等场景。比较遵循BSON类型顺序,不同类型不会报错而是按类型序比较。与$eq、$gt等返回布尔值的操作符不同,$cmp返回三值结果,适合直接喂给排序逻辑或分支判断。
| 分类 | 集合·条件·转换 |
|---|---|
| MongoDB 版本 | 1.0+ |
| 示例语言 | mongosh (Shell) |
📝 语法
{ $cmp: [ <表达式1>, <表达式2> ] }
⚙️ 参数
| 表达式1 | 参与比较的第一个表达式。 |
|---|---|
| 表达式2 | 参与比较的第二个表达式。 |
返回值:第一个小于第二个返回-1,相等返回0,大于返回1
▶ 示例
请在本地安装的 mongosh 中执行以下命令(需已启动 mongod):
// $cmp:比较两个分数
db.scores.aggregate([
{ $project: {
result: { $cmp: ['$scoreA', '$scoreB'] }
} }
])
运行结果:
{ '_id': 1, 'result': 1 }
{ '_id': 2, 'result': -1 }
📌 注意事项
- 返回三值:-1、0、1,不是布尔值
- 不同类型按BSON类型顺序比较,不会报错
- null参与比较时按类型序排在数字之前
🏷️ 相关标签
💡 相关案例
更多实战案例即将上线,敬请期待。
📚 相关教程
❓ 常见问题
Q$cmp返回什么值?
A第一个小于第二个返回-1,相等返回0,大于返回1。
Q$cmp和$eq有什么区别?
A$eq返回布尔值,$cmp返回三值结果,更适合排序和分支。
Q$cmp比较不同类型会报错吗?
A不会,按BSON类型顺序比较,如字符串排在数字之后。