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.

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 límites de pasos, memoria y tiempo, 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

Arranca los nodos con --noscripting (o security.javascriptEnabled: false en el fichero de configuración) y las consultas con JavaScript responden con error.

mapReduce está obsoleto en MongoDB, pero se mantiene porque mongosh y los drivers lo siguen enviando. Para código nuevo usa el framework de agregación.