Ogni query che utilizza JS può riutilizzare o ottenere un contesto JS nuovo di zecca, su cui vengono caricati gli oggetti JS archiviati. Per fare ciò che vuoi, devi:
- mongod per eseguire automaticamente il codice memorizzato durante l'installazione
- mapreduce per avere un metodo init
La prima è sicuramente la caratteristica più interessante. Si scopre che la build mongodb v8 lo fa automaticamente (ma non ufficialmente supportata), ma non la build ufficiale di spidermonkey.
Supponi di memorizzare un codice come:
db.system.js.save({ _id: "mylib", value: "myprint = function() { print('installed'); return 'installed';" }
Quindi in v8 puoi usare myprint() liberamente nel tuo codice, ma con SM dovresti chiamare mylib() in modo esplicito.
Come soluzione alternativa puoi creare un altro metodo:
db.system.js.save({ _id: "installLib", value: "if (!libLoaded) mylib(); libLoaded = true;" }
E chiamalo dalla tua funzione map().
Ticket creato per standardizzare i motori e consentire l'esecuzione automatica:https://jira.mongodb.org /sfoglia/SERVER-4450