MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Techniken zum Speichern von Bibliotheken in system.js von mongoDB

Jede Abfrage, die JS verwendet, kann einen brandneuen JS-Kontext wiederverwenden oder erhalten, in dem gespeicherte JS-Objekte geladen werden. Um zu tun, was Sie wollen, benötigen Sie entweder:

  1. Mongod, um den gespeicherten Code bei der Installation automatisch auszuführen
  2. mapreduce um eine Init-Methode zu haben

Das erste ist definitiv das interessantere Feature. Es stellt sich heraus, dass der Mongodb v8-Build dies automatisch tut (aber nicht offiziell unterstützt wird), aber nicht der offizielle Spidermonkey-Build.

Sagen Sie Ihren Geschäftscode wie:

db.system.js.save({ _id: "mylib", value: "myprint = function() { print('installed'); return 'installed';" }

Dann können Sie in v8 myprint() frei in Ihrem Code verwenden, aber mit SM müssten Sie mylib() explizit aufrufen.

Als Problemumgehung können Sie eine andere Methode erstellen:

db.system.js.save({ _id: "installLib", value: "if (!libLoaded) mylib(); libLoaded = true;" }

Und rufen Sie es von Ihrer map()-Funktion auf.

Ticket erstellt, um Engines zu standardisieren und automatisches Ausführen zu ermöglichen:https://jira.mongodb.org /browse/SERVER-4450