JavaScript en el servidor

$where, $function, $accumulator y mapReduce con un intérprete aislado.

TeselaDB ejecuta el JavaScript de las consultas de MongoDB: $where, $function, $accumulator y mapReduce. Lo hace con un intérprete propio escrito en Rust que solo ve los documentos que recibe.

Requisitos

  • Nodos arrancados sin --noscripting.
JavaScript
db.pedidos.aggregate([
  {
    $addFields: {
      iva: {
        $function: {
          body: "function (total) { return Math.round(total * 0.21 * 100) / 100 }",
          args: ["$total"],
          lang: "js",
        },
      },
    },
  },
]);

Límites

Cada ejecución tiene un límite de tiempo y otros de pasos y de memoria, como en MongoDB. Las fechas locales de JavaScript van en UTC y los tipos de BSON se ven con sus nombres de MongoDB (NumberLong, ObjectId…).

Desactivarlo

Si arrancas los nodos con --noscripting (o con security.javascriptEnabled: false en el fichero de configuración), las consultas con JavaScript responden con un error. Lo hacen en todos los nodos que arranques así, y las consultas que no llevan JavaScript siguen funcionando igual.

MongoDB marca mapReduce como obsoleto. TeselaDB lo mantiene porque mongosh y los drivers lo siguen enviando. Para código nuevo usa el framework de agregación.

Comprobar

Una consulta con $where devuelve los mismos documentos que su versión con operadores.

Problemas frecuentes

  • Las consultas con JavaScript responden con un error porque los nodos arrancaron con --noscripting o con security.javascriptEnabled: false.

Ver también