帮助MongoDB中的map reduce

时间:2011-07-18 23:23:26

标签: mongodb mapreduce

我很难掌握map reduce的工作原理以及何时使用它。我得到的一些随机结果只是没有意义,但也许我对mapreduce的理解是错误的?

这是我正在做的一个例子。

我收集了超过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.
  ]
}

所以,我猜地图缩小是这个权利的理想候选人吗?如果是,那么正确的地图和减少功能怎么样?

1 个答案:

答案 0 :(得分: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的纠正。