2011-07-18 8 views
0

マップの縮小の仕組みと使い方をしっかりと把握するのに苦労しています。私はちょうど意味を成し遂げていないいくつかのランダムな結果を得ていますが、間違ってマップリダクションの私の理解?MongoDBのmap reduceのヘルプ

ここに私がやっていることの例があります。

私は以下の構造の15000以上の英国の町のコレクションを持っています。

{ 
    "_id" : ObjectId("4e234105e138231a7f000004"), 
    "county" : "Powys", 
    "name" : "Abbey-Cwmhir", 
    "location" : { 
    "latitude" : 52.3298355191946, 
    "longitude" : -3.39230306446552 
    } 
} 

各郡には、多くの町があり、私は、各郡の次の構造を持つ新しいコレクションを取得したいと思います。

{ 
    "_id" : "Powys", 
    "towns" : [ 
    { 
     "name" : "Abbey-Cwmhir", 
     "loc" : [52.3298355191946, -3.39230306446552] 
    }, 
    //.. etc. 
    ] 
} 

このように、map reduceはこの権利の理想的な候補ですか?そうであれば、正しい地図と機能をどのように減らすことができますか?あなたはこのようなもの使用することができます出発点として

答えて

2

地図機能

function() { 
    emit(this.county,{ 
      towns: [ 
      { 
       name: this.name, 
       loc: this.location 
      } 
      ] 
     }); 
} 

は機能

function(key, values) { 
    result = { towns: [] }; 
    values.forEach( 
    function(townsgroup) { 
     townsgroup.towns.forEach( 
     function(town) { 
      result.towns.push(town); 
     }); 
    }); 
    return result; 
} 

を削減あなたは修正のためdcrostaありがとうございました。

+2

'reduce'の戻り値は、出力値の形式と一致する必要があります。http://www.mongodb.org/display/DOCS/MapReduce#MapReduce-ReduceFunction – dcrosta

+0

@dcrosta:tnxを修正します。 –

+0

私は何が間違っているのか正確にはわかりませんが、この例はうまくいきます!私はそれが私の脳の中をクリックするまでこれを研究するつもりです!どうもありがとうございました。 – Kevin

関連する問題