Každý dotaz využívající JS může znovu použít nebo získat zcela nový kontext JS, do kterého se načtou uložené objekty JS. Abyste mohli dělat, co chcete, potřebujete buď:
- musí spouštět uložený kód automaticky při jeho instalaci
- mapreduce mít metodu init
První je rozhodně zajímavější funkce. Ukázalo se, že mongodb v8 to dělá automaticky (ale není oficiálně podporováno), ale ne oficiální sestavení spidermonkey.
Řekněme, že kód úložiště jako:
db.system.js.save({ _id: "mylib", value: "myprint = function() { print('installed'); return 'installed';" }
Ve verzi 8 pak můžete ve svém kódu volně používat myprint(), ale s SM byste museli volat mylib() explicitně.
Jako řešení můžete vytvořit jinou metodu:
db.system.js.save({ _id: "installLib", value: "if (!libLoaded) mylib(); libLoaded = true;" }
A zavolejte ji z vaší funkce map().
Vytvořený lístek za účelem standardizace motorů a umožnění automatického spuštění:https://jira.mongodb.org /browse/SERVER-4450