重要
从 MongoDB 5.0 开始,Map-reduce 已被弃用。
MongoDB提供了以下运算符,用于在服务器端执行JavaScript代码:
$where运算符,用于计算 JavaScript 表达式或函数以查询文档。$accumulator和$function聚合操作,允许用户定义自定义聚合表达式。
使用MongoDB Shell运行 .js 文件
您可以为mongosh指定 JavaScript ( .js ) 文件,以在服务器上执行该文件。 这是执行批处理管理工作的好方法。 当您在服务器上运行mongosh并通过本地主机接口进行连接时,连接速度快且延迟低。
禁用服务器端JavaScript
要禁用 mongod 或 mongos 在服务器端执行JavaScript ,您可以执行以下任一操作:
在命令行上传递
--noscripting选项。请参阅mongod --noscripting和mongos --noscripting。在配置文件中将
security.javascriptEnabled设置为 false。
行为
MongoDB 中的 JavaScript
尽管服务器端方法使用JavaScript,但与MongoDB 的大多数交互并不使用JavaScript ,而是使用交互应用程序语言中的一致驾驶员。
并发
有关任何并发信息,请参阅每种方法或运算符文档。另请参阅并发表格。
不支持的数组与字符串函数
MongoDB 6.0升级用于服务器端JavaScript 、 $accumulator 、 $function和$where表达式的内部JavaScript引擎,并从 MozJS- 60升级到 MozJS- 91 。 MozJS-60 中存在的几个已弃用的非标准大量和string函数已在 MozJS-91 中删除。
Unavailable on ppc64le
从MongoDB 9.0 开始,服务器端JavaScript在 ppc64le 架构上不可用。 ppc64le 的 mongod 和mongos 二进制文件不包含JavaScript引擎。因此,$where、$accumulator、$function 和map-reduce操作在该架构上失败。您无法使用配置文件设置或命令行选项在 ppc64le 上启用服务器端JavaScript 。
要运行这些操作,请在包含JavaScript引擎的架构上使用部署。您还可以重写操作以使用不需要服务器端JavaScript 的聚合管道阶段和操作符。
日期操作使用 UTC
从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 注意事项
如果您使用 SELinux,任何需要服务器端JavaScript的MongoDB操作都会导致 segfault 错误。要禁用服务器端JavaScript的执行,请参阅禁用服务器端JavaScript。