JavaScript(代码)
最后更新:2026-10-09
JavaScript(代码)
JavaScript类型用于在文档中存储JS代码,配合`$where`在服务端执行(逐文档运行)。`$where`无法利用索引且性能差,仅适合小集合或无法用查询操作符表达的复杂逻辑。注意:MongoDB 8.0起默认禁用服务端JavaScript执行,需要显式启动参数;新代码优先用`$expr`或`$function`聚合操作符。
| 分类 | BSON 类型 |
|---|---|
| MongoDB 版本 | 1.0+ |
| 示例语言 | mongosh (Shell) |
📝 语法
{ $where: "this.price * this.qty > 100" }
{ $expr: { $gt: [{ $multiply: ["$price", "$qty"] }, 100] } }
返回值:$where返回满足条件的文档;存储的JS值是代码字符串
▶ 示例
请在本地安装的 mongosh 中执行以下命令(需已启动 mongod):
// JavaScript:$where服务端执行
use shop
db.orders.find({ $where: 'this.price * this.qty > 1000' })
运行结果:
// 返回price×qty大于1000的订单(全表扫描)
📌 注意事项
- $where逐文档执行JS,无法用索引,性能差
- 8.0起默认禁用服务端JS,需--enableJavaScriptExecution
- 用$expr/$function聚合表达式替代更安全高效
🏷️ 相关标签
💡 相关案例
更多实战案例即将上线,敬请期待。
📚 相关教程
❓ 常见问题
Q$where为什么慢?
A它逐文档调用JS解释器,无法利用索引,只能全表扫描。
QMongoDB 8.0还能用$where吗?
A默认禁用,启动需加--enableJavaScriptExecution参数。
Q复杂跨字段比较怎么写?
A用$expr配合$multiply等聚合操作符,可走优化器且部分利用索引。