Cada consulta usando JS pode reutilizar ou obter um novo contexto JS, no qual os objetos JS armazenados são carregados. Para fazer o que você deseja, você precisa:
- mongod para executar o código armazenado automaticamente ao instalá-lo
- mapreduce para ter um método init
O primeiro é definitivamente o recurso mais interessante. Acontece que a versão mongodb v8 faz isso automaticamente (mas não é oficialmente suportada), mas não a versão oficial do spidermonkey.
Digamos que você armazene códigos como:
db.system.js.save({ _id: "mylib", value: "myprint = function() { print('installed'); return 'installed';" }
Então na v8 você pode usar myprint() livremente em seu código, mas com SM você precisaria chamar mylib() explicitamente.
Como solução alternativa, você pode criar outro método:
db.system.js.save({ _id: "installLib", value: "if (!libLoaded) mylib(); libLoaded = true;" }
E chame-o da sua função map().
Bilhete criado para padronizar motores e permitir execução automática:https://jira.mongodb.org /browse/SERVER-4450