Importante
Map-reduce está deprecado a partir de MongoDB 5.0.
MongoDB proporciona los siguientes operadores que realizan la ejecución del código JavaScript en el servidor:
$whereoperador que evalúa una expresión o función de JavaScript para realizar una query de documentos.Operaciones de agregación
$accumulatory$functionque permiten a los usuarios definir expresiones de agregación personalizadas.
Ejecuta archivos .js con la consola de MongoDB.
Puede especificar un archivo de JavaScript (.js) para mongosh para ejecutar el archivo en el servidor. Esta es una buena técnica para realizar trabajo administrativo agrupado. Cuando ejecute mongosh en el servidor, conectándose a través de la interfaz localhost, la conexión es rápida y de baja latencia.
Deshabilitar JavaScript del lado del servidor
Para deshabilitar toda la ejecución de JavaScript del lado del servidor para mongod o mongos, puede hacer lo siguiente:
Pasa la opción
--noscriptingen la línea de comandos. Consultamongod --noscriptingymongos --noscripting.Establezca
security.javascriptEnableden falso en el archivo de configuración.
Comportamiento
JavaScript en MongoDB
Aunque los métodos del lado del servidor utilizan JavaScript, la mayoría de las interacciones con MongoDB no utilizan JavaScript, sino que emplean un controlador idiomático en el lenguaje de la aplicación que interactúa con ella.
Simultaneidad
Consulta la documentación individual del método u operador para cualquier información sobre concurrencia. Consulte también la tabla de simultaneidad.
Funciones de string y arreglo no compatibles
MongoDB 6.0 actualiza el motor interno de JavaScript utilizado para JavaScript del lado del servidor, $accumulator, $function y $where expresiones y de MozJS-60 a MozJS-91. Varias funciones de arreglos y string obsoletas y no estándar que existían en MozJS-60 se eliminaron en MozJS-91.
Unavailable on ppc64le
A partir de MongoDB 9.0, JavaScript del lado del servidor no está disponible en la arquitectura ppc64le. Los binarios mongod y mongos para ppc64le no incluyen un motor JavaScript. Como resultado, $where, $accumulator, $function y las operaciones map-reduce fallan en esa arquitectura. No se puede habilitar JavaScript del lado del servidor en ppc64le mediante un archivo de configuración ni una opción de línea de comandos.
Para ejecutar estas operaciones, utilice una implementación en una arquitectura que incluya un motor JavaScript. También puede reescribir las operaciones para usar etapas y operadores de canalización de agregación que no requieran JavaScript del lado del servidor.
Las operaciones con fechas utilizan UTC.
A partir de MongoDB 9.0, JavaScript del lado del servidor evalúa las operaciones locales Date en UTC, independientemente de la zona horaria del host mongod. Los métodos getter locales como Date.prototype.getHours(), los constructores y setters locales, y las operaciones que convierten una fecha a una cadena, utilizan UTC. El valor de fecha BSON almacenado no cambia, al igual que Date.prototype.getTime(), Date.prototype.toISOString() y los métodos getUTC*().
Para evaluar fechas en una zona horaria específica, utilice un operador de agregación de fechas como $hour con un argumento timezone explícito. Evite los métodos Date locales en JavaScript. Para obtener orientación sobre la actualización,consulte Cambios de compatibilidad en MongoDB 9.0.
Consideraciones sobre SELinux
Si utiliza SELinux, cualquier operación de MongoDB que requiera JavaScript del lado del servidor provocará un error de segmentación. Para deshabilitar la ejecución de JavaScript del lado del servidor, consulte Deshabilitar JavaScript del lado del servidor.