stored functions example custom create javascript mongodb mapreduce google-closure-library

javascript - functions - técnicas para almacenar bibliotecas en system.js de mongoDB



mongodb javascript function example (1)

Cada consulta que utiliza JS puede reutilizar u obtener un nuevo contexto JS, en el que se cargan los objetos JS almacenados. Para hacer lo que quieres, necesitas:

  1. mongod para ejecutar el código almacenado automáticamente al instalarlo
  2. mapreduce tener un método init

La primera es definitivamente la característica más interesante. Resulta que la compilación de mongodb v8 lo hace automáticamente (pero no es compatible oficialmente), pero no la compilación oficial de spidermonkey.

Supongamos que almacena código como:

db.system.js.save({ _id: "mylib", value: "myprint = function() { print(''installed''); return ''installed'';" }

Luego, en v8 puedes usar myprint () libremente en tu código, pero con SM deberás llamar a mylib () explícitamente.

Como solución, puede crear otro método:

db.system.js.save({ _id: "installLib", value: "if (!libLoaded) mylib(); libLoaded = true;" }

Y llámalo desde tu función map ().

Boleto creado para estandarizar motores y permitir el funcionamiento automático: https://jira.mongodb.org/browse/SERVER-4450

¿Existen técnicas confiables para almacenar bibliotecas / marcos basados ​​en prototipos en system.js de mongoDB ? Me encontré con este problema al tratar de usar formatos dateJS dentro de un map-reduce. JIRA # SERVER-770 explica que los cierres de objetos, incluidos sus prototipos, se pierden cuando se serializan en la colección system.js, y que este es el comportamiento esperado. Desafortunadamente, esto excluye muchos frameworks geniales como dojo , Google Closure y jQuery .

¿Hay alguna manera de convertir o contener bibliotecas de alguna manera para que no se basen en el prototipado? Hay alguna promesa de inicializar antes de Map-Reduce y pasarlos a través del objeto de alcance, pero hasta ahora no he tenido mucha suerte. Si mi enfoque es defectuoso, ¿cuál es una mejor forma de habilitar el reutilización de JavaScript en el servidor para mongo?