2011-07-18 18 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