2011-12-07 8 views
0

mongoDBのsystem.jsにプロトタイプベースのライブラリ/フレームワークを格納するための信頼できるテクニックはありますか? map-reduce内でdateJSの形式を使用しようとすると、この問題が発生しました。 JIRA #SERVER-770は、オブジェクトのクロージャ(プロトタイプを含む)がsystem.jsコレクションにシリアライズされたときに失われ、これが予想される動作であると説明しています。残念ながら、これにはdojo,Google ClosurejQueryなどの多くの素晴らしいフレームワークは含まれていません。mongoDBのsystem.jsにライブラリを格納する方法

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

答えて

1

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

  • MapReduceのそれをインストールするときにinitメソッド
  • を持つように最初は間違いなくより多くので自動的に保存されたコードを実行するための

    1. のmongodを興味深い機能。 mongodb v8ビルドは自動的にそれを行いますが(公式にはサポートされていません)、正式なスパイダーモンキービルドは行いません。そして、V8で、あなたのコード内で自由に)(myprintを使用することができますが、SMと明示的に)(MYLIBを呼び出す必要があり

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

      はあなたのようなコードを保存すると言います。

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

      そして、あなたのマップ()関数からそれを呼び出す:あなたは別のメソッドを作成することができます回避策として

      エンジンを標準化して自動実行を許可するためのチケットを作成しました。 https://jira.mongodb.org/browse/SERVER-4450

    関連する問題