Elke query die JS gebruikt, kan opnieuw worden gebruikt of een geheel nieuwe JS-context krijgen, waarop opgeslagen JS-objecten worden geladen. Om te doen wat je wilt, heb je het volgende nodig:
- mongod om de opgeslagen code automatisch uit te voeren bij het installeren
- mapreduce om een init-methode te hebben
De eerste is absoluut de interessantere functie. Het blijkt dat de mongodb v8-build dit automatisch doet (maar niet officieel ondersteund), maar niet de officiële spidermonkey-build.
Stel dat u een code opslaat zoals:
db.system.js.save({ _id: "mylib", value: "myprint = function() { print('installed'); return 'installed';" }
Dan kun je in v8 myprint() vrijelijk in je code gebruiken, maar met SM zou je mylib() expliciet moeten aanroepen.
Als tijdelijke oplossing kunt u een andere methode maken:
db.system.js.save({ _id: "installLib", value: "if (!libLoaded) mylib(); libLoaded = true;" }
En roep het aan vanuit je map() functie.
Ticket gemaakt om engines te standaardiseren en automatische uitvoering mogelijk te maken:https://jira.mongodb.org /bladeren/SERVER-4450