3

nodejsでマングースを使用しています。私はmapReduceを使用して、フィールドごとにグループ化されたデータをフェッチしています。したがって、コレクションとして提供されるのは、データベースのすべての行からのみグループ化フィールドを持つキーです。

フィールドごとにグループ化され、別のフィールドに基づいて並べ替えられたデータベースからすべてのフィールドをフェッチする必要があります。例:場所の詳細とそれらの場所への旅行の運賃、および他のいくつかのフィールドもあるデータベースがあります。運賃でソートされた場所に基づいてデータをグループ化するような方法でデータをフェッチします。MapReduceはそれを取得するのに役立ちますが、他のフィールドを取得できません。

上記の例で述べたように2つのフィールドを取得するだけでなく、mapreduceを使用してすべてのフィールドを取得する方法はありますか?

4

1 に答える 1

0

私はあなたが何を求めているのか完全に理解しているかどうかわからないことを認めなければなりません。しかし、おそらく次の考えの1つがあなたを助けます:

) mapReduceの結果を反復処理すると、結果ごとにmongodbから完全なドキュメントをフェッチできます。これにより、一部のネットワークトラフィックのコストで、各ドキュメントのすべてのフィールドにアクセスできるようになります。

または)emit(key、value)に送信する値はオブジェクトにすることができます。したがって、必要なすべてのフィールドを含む値オブジェクトを作成できます。reduceメソッドの戻り値には、必ずまったく同じオブジェクト構造を使用してください。

私は(テストされていない)例で説明しようとします。

map = function() {
   emit(this.place, 
        {
           'field1': this.field1, 
           'field2': this.field2, 
           'count' : 1 
        });
}

reduce = function(key, values) {
   var result = { 
       'field1': values[0].field1, 
       'field2': values[0].field2, 
       'count' : 0 };

   for (v in values) {
       result.count += values[v].count;
   }

   return obj;
}
于 2011-07-30T14:26:20.910 に答える