对于 AI 代理:可在 https://www.mongodb.com/zh-cn/docs/llms.txt 获取文档索引—通过在任何 URL 路径后添加 .md 可获取所有页面的 Markdown 版本。
Docs 菜单

服务器端 JavaScript

重要

从 MongoDB 5.0 开始,Map-reduce 已被弃用。

MongoDB提供了以下运算符,用于在服务器端执行JavaScript代码:

  • $where 运算符,用于计算 JavaScript 表达式或函数以查询文档。

  • $accumulator 和 $function 聚合操作,允许用户定义自定义聚合表达式。

您可以为mongosh指定 JavaScript ( .js ) 文件,以在服务器上执行该文件。 这是执行批处理管理工作的好方法。 当您在服务器上运行mongosh并通过本地主机接口进行连接时,连接速度快且延迟低。

要禁用 mongod 或 mongos 在服务器端执行JavaScript ,您可以执行以下任一操作:

尽管服务器端方法使用JavaScript,但与MongoDB 的大多数交互并不使用JavaScript ,而是使用交互应用程序语言中的一致驾驶员。

有关任何并发信息,请参阅每种方法或运算符文档。另请参阅并发表格。

MongoDB 6.0升级用于服务器端JavaScript 、 $accumulator 、 $function和$where表达式的内部JavaScript引擎,并从 MozJS- 60升级到 MozJS- 91 。 MozJS-60 中存在的几个已弃用的非标准大量和string函数已在 MozJS-91 中删除。

从MongoDB 9.0 开始,服务器端JavaScript在 ppc64le 架构上不可用。 ppc64le 的 mongod 和mongos 二进制文件不包含JavaScript引擎。因此,$where、$accumulator、$function 和map-reduce操作在该架构上失败。您无法使用配置文件设置或命令行选项在 ppc64le 上启用服务器端JavaScript 。

要运行这些操作,请在包含JavaScript引擎的架构上使用部署。您还可以重写操作以使用不需要服务器端JavaScript 的聚合管道阶段和操作符。

从MongoDB 9.0 开始,服务器端JavaScript都会以 UTC 格式计算本地 Date 操作,而无论 mongod托管哪个时区域。 Date.prototype.getHours() 等本地读取器、本地构造器和赋值器以及将日期转换为字符串的操作都使用 UTC。存储的BSON日期值保持不变,Date.prototype.getTime()、Date.prototype.toISOString() 和 getUTC*() 方法也是如此。

要计算指定时区域中的日期,请使用聚合日期操作符,例如带有显式 timezone 参数的 $hour。避免在JavaScript中使用本地 Date 方法。有关升级指导,请参阅MongoDB 9.0 中的兼容性更改。

如果您使用 SELinux,任何需要服务器端JavaScript的MongoDB操作都会导致 segfault 错误。要禁用服务器端JavaScript的执行,请参阅禁用服务器端JavaScript。