$expr(聚合表达式查询)

最后更新:2026-10-09

$expr(聚合表达式查询)

$expr 允许在查询条件中使用聚合表达式,比较同一文档内多个字段或调用聚合操作符。`{ $expr: { $gt: ['$price', '$cost'] } }` 查询售价高于成本的商品,$ 前缀引用字段值。注意:$expr 通常无法走索引(MongoDB 6.0 起部分场景可走索引),大集合慎用。

分类元素与求值
MongoDB 版本3.6+
示例语言mongosh (Shell)

📝 语法

{ $expr: { <聚合表达式> } }

⚙️ 参数

聚合表达式如 { $gt: ['$price', '$cost'] },$ 前缀引用字段值。

返回值:匹配的文档游标

▶ 示例

请在本地安装的 mongosh 中执行以下命令(需已启动 mongod):

// $expr:售价高于成本的商品
// $price 引用字段值,不是字符串
db.products.find({ $expr: { $gt: ['$price', '$cost'] } })

// 比较两个字段相等
db.users.find({ $expr: { $eq: ['$email', '$username'] } })

运行结果:

// 返回 price 大于 cost 的商品;email 与 username 相同的用户

📌 注意事项

📚 相关教程

❓ 常见问题

Q$expr 怎么比较同一文档的两个字段?
A用 $ 引用:{ $expr: { $gt: ['$price', '$cost'] } }。
Q$expr 能走索引吗?
A大多数情况下不能;MongoDB 6.0 起部分情况(如范围比较)可以走索引。
Q$expr 和 $where 有什么区别?
A$expr 用聚合表达式(推荐),$where 用 JavaScript(慢且无法走索引)。
Web-Tutorial.com

Web-Tutorial 技术团队

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

100%

🙏 帮我们做得更好

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

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