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

📌 注意事项

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

📚 相关教程

❓ 常见问题

Q$cmp返回什么值?
A第一个小于第二个返回-1,相等返回0,大于返回1。
Q$cmp和$eq有什么区别?
A$eq返回布尔值,$cmp返回三值结果,更适合排序和分支。
Q$cmp比较不同类型会报错吗?
A不会,按BSON类型顺序比较,如字符串排在数字之后。
Web-Tutorial.com

Web-Tutorial 技术团队

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

100%

🙏 帮我们做得更好

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

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