JSを使用するすべてのクエリは、保存されたJSオブジェクトが読み込まれる新しいJSコンテキストを再利用または取得する場合があります。必要な処理を実行するには、次のいずれかが必要です。
- インストール時に保存されたコードを自動的に実行するmongod
- 初期化メソッドを持つようにmapreduce
1つ目は間違いなくより興味深い機能です。mongodbv8ビルドは自動的に実行しますが(公式にはサポートされていません)、公式のspidermonkeyビルドは実行しません。
次のようなコードを保存するとします:
db.system.js.save({ _id: "mylib", value: "myprint = function() { print('installed'); return 'installed';" }
次に、v8ではコードでmyprint()を自由に使用できますが、SMではmylib()を明示的に呼び出す必要があります。
回避策として、別のメソッドを作成できます:
db.system.js.save({ _id: "installLib", value: "if (!libLoaded) mylib(); libLoaded = true;" }
そして、map()関数から呼び出します。
エンジンを標準化し、自動実行を許可するために作成されたチケット: https://jira.mongodb.org / browser / SERVER-4450