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.
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
--noscriptingo consecurity.javascriptEnabled: false.