2011-07-18 20 views
0

我正在努力掌握地圖縮減工作方式以及何時使用它。我得到了一些無意義的結果,但也許我對mapreduce的理解錯了?幫助MongoDB中的地圖縮小工作

下面是我正在做的一個例子。

我有超過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. 
    ] 
} 

所以,我想地圖縮小是這個權利的理想人選?如果是這樣,那麼如何正確的映射和減少功能呢?

回答

2

正如你可以使用類似這樣的出發點:

地圖功能

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

Reduce函數

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