0

プロトタイプベースのライブラリ/フレームワークをmongoDBのsystem.jsに保存するための信頼できる手法はありますか?map-reduce内でdateJS形式を使用しようとしたときに、この問題に遭遇しました。JIRA #SERVER-770は、オブジェクトのクロージャ(プロトタイプを含む)がsystem.jsコレクションにシリアル化されると失われ、これが予期される動作であると説明しています。残念ながら、これにはdojoGoogle ClosurejQueryなどの多くの優れたフレームワークが含まれていません。

プロトタイプに依存しないように、ライブラリを何らかの方法で変換または含める方法はありますか?Map-Reduceの前に初期化して、スコープオブジェクトを介して渡すことにはいくつかの約束がありますが、これまでのところあまり運がありません。私のアプローチに欠陥がある場合、サーバー側のjavascriptをmongoで再利用できるようにするためのより良い方法は何ですか?

4

1 に答える 1

1

JSを使用するすべてのクエリは、保存されたJSオブジェクトがロードされる新しいJSコンテキストを再利用または取得できます。やりたいことをするためには、次のいずれかが必要です。

  1. インストール時に保存されたコードを自動的に実行するmongod
  2. mapreduceでinitメソッドを使用する

最初は間違いなくもっと面白い機能です。mongodb v8ビルドは自動的に実行しますが(公式にはサポートされていません)、公式の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/browse/SERVER-4450

于 2011-12-07T18:41:16.113 に答える