0

map reduce 関数がクライアント スコープを使用できないため、すべての関数をサーバーに送信 (または保存) する必要がある (既存のコードを再利用するのは難しい) という問題を抱えて、mongo を中心に js コードを整理するための良いアイデアを探しています。サーバーに格納された関数を使用できますが、db/client システムのスコープが大きすぎるため、db スコープの関数は使用できないようです。

他のアイデアは、次のようなJavaScriptプリプロセッサを使用することです:

var mapFunction = function() {
    // @include lib.js
    Lib.foo(this.bar);
}

lib.js :

var Lib = {
    foo : function(bar) {...}
}

生成された mapFunction を mapReduce コマンド内で実行します。

mongodb map/reduce javascript コードベース内で (システムに格納された関数を使用せずに) 適切なコードの再利用を実現するための優れたプラクティス/アイデアはありますか?

4

1 に答える 1

0

MongoDBのサーバー側関数DB スコープです。ただし、バージョン管理システムでアプリケーションの残りの部分と共に維持されるコードを支持するため、通常は推奨されません。

アプリケーションから map/reduce コマンドを送信する場合、プリプロセッサは必要ありません。適切なコードを挿入する変数または関数を呼び出すことができます。

特定の言語については言及していませんが、MongoDB PHP documentationから借用した例を次に示します。

// construct map and reduce functions
$map = new MongoCode("function() { emit(this.user_id,1); }");
$reduce = new MongoCode("function(k, vals) { ".
    "var sum = 0;".
    "for (var i in vals) {".
        "sum += vals[i];". 
    "}".
    "return sum; }");

$sales = $db->command(array(
    "mapreduce" => "events", 
    "map" => $map,
    "reduce" => $reduce,
    "query" => array("type" => "sale"),
    "out" => array("merge" => "eventCounts")));
于 2012-07-13T06:08:09.317 に答える