Hver forespørgsel, der bruger JS, kan genbruge eller få en helt ny JS-kontekst, hvorpå lagrede JS-objekter indlæses. For at gøre, hvad du vil, skal du enten:
- mongod for at køre den lagrede kode automatisk, når den installeres
- kortlægge for at have en init-metode
Den første er absolut den mere interessante funktion. Det viser sig, at mongodb v8 build automatisk gør det (men ikke officielt understøttet), men ikke den officielle spidermonkey build.
Lad os sige, at du gemmer kode som:
db.system.js.save({ _id: "mylib", value: "myprint = function() { print('installed'); return 'installed';" }
Så i v8 kan du bruge myprint() frit i din kode, men med SM skal du kalde mylib() eksplicit.
Som en løsning kan du oprette en anden metode:
db.system.js.save({ _id: "installLib", value: "if (!libLoaded) mylib(); libLoaded = true;" }
Og kald det fra din map() funktion.
Oprettet billet for at standardisere motorer og tillade automatisk kørsel:https://jira.mongodb.org /browse/SERVER-4450