Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home

Almacene una función de JavaScript en el servidor

Importante

A partir de MongoDB 8.0, JavaScript del lado del servidor está en desuso. system.js La funcionalidad puede no funcionar con todas las funciones.

Existe una colección especial del sistema llamada system.js que puede almacenar funciones JavaScript para su reutilización.

Esta tarea utiliza la herencia Shell mongo para cargar funciones del lado del servidor desde la colección system.js. Esta versión del shell ya no es compatible. Para una solución alternativa en MongoDB Shell, consulta Escribe scripts.

Tenga en cuenta las siguientes recomendaciones al utilizar system.js:

  • No almacenar la lógica de la aplicación en la base de datos.

  • Existen limitaciones de rendimiento para ejecutar JavaScript dentro de MongoDB.

  • El código de la aplicación es más efectivo cuando comparte control de versiones con la aplicación.

Para almacenar una función, insértela en la colección system.js, como en estos ejemplos:

1
db.test_numbers.insertMany([
{ value: 1 },
{ value: 2 },
{ value: 3 },
{ value: 4 },
{ value: 5 },
{ value: 6 }
])
2

Para almacenar funciones JavaScript en la base de datos, inserte un documento con estos campos:

  • El campo _id contiene el nombre de la función y es único por base de datos.

  • El campo value contiene la definición de la función.

El siguiente ejemplo crea una función echo en la colección system.js:

db.system.js.insertOne(
{
_id: "echo",
value : function(x) { return x; }
}
)

El siguiente ejemplo crea una función isEven en la colección system.js:

db.system.js.insertOne(
{
_id: "isEven",
value: function (num) {
return num % 2 === 0;
}
}
)

Estas funciones, guardadas como tipo BSON, están disponibles para su uso en cualquier contexto de JavaScript, como mapReduce y $where.

Nota

Las funciones guardadas como el tipo obsoleto BSON JavaScript (con alcance) no pueden ser utilizadas por mapReduce y $where.

3
db.loadServerScripts()
4
  1. El siguiente ejemplo de código ejecuta la función echo almacenada en system.js:

    echo("test")
    test
  2. El siguiente ejemplo de código ejecuta la función isEven almacenada en system.js en el operador $where sobre la colección test_numbers:

    db.test_numbers.find({
    $where: function () {
    return isEven(this.value);
    }
    })
    { "_id" : ObjectId("668d7be41b55bec1bf191499"), "value" : 2 }
    { "_id" : ObjectId("668d7be41b55bec1bf19149b"), "value" : 4 }
    { "_id" : ObjectId("668d7be41b55bec1bf19149d"), "value" : 6 }

En esta página