Każde zapytanie używające JS może ponownie użyć lub uzyskać zupełnie nowy kontekst JS, do którego ładowane są przechowywane obiekty JS. Aby zrobić to, co chcesz, potrzebujesz:
- mongod do automatycznego uruchamiania zapisanego kodu podczas instalacji
- mapreduce, aby mieć metodę init
Pierwsza to zdecydowanie bardziej interesująca funkcja. Okazuje się, że kompilacja mongodb v8 robi to automatycznie (ale nie jest oficjalnie obsługiwana), ale nie jest to oficjalna kompilacja spidermonkey.
Załóżmy, że przechowujesz kod taki jak:
db.system.js.save({ _id: "mylib", value: "myprint = function() { print('installed'); return 'installed';" }
Następnie w wersji 8 możesz swobodnie używać myprint() w swoim kodzie, ale w przypadku SM musisz jawnie wywołać mylib().
Jako obejście możesz utworzyć inną metodę:
db.system.js.save({ _id: "installLib", value: "if (!libLoaded) mylib(); libLoaded = true;" }
I wywołaj to z funkcji map().
Utworzony bilet w celu standaryzacji silników i umożliwienia automatycznego uruchamiania:https://jira.mongodb.org /przeglądaj/SERWER-4450