我该如何在MongoDB中使用Map/Reduce?

10

我对MongoDB中的map/reduce是如何工作感到困惑。 我有一个集合,它具有字段:areacode、state、county、zip、city、lat和lon,该集合列出了美国每个邮政编码以及相应的县、州等信息。

我想能够查询给定州中所有县或城市。所以基本上是某种查询,查找所有“State = MI”的记录。在这种情况下,大约会返回900条记录。如何按县分组,以便我只获取该州的83个县?我不想使用distinct方法,因为我想能够按字母顺序排序并可能提取出纬度/经度。

有关如何使用map/reduce实现此目的的建议吗?我觉得这很基本,但我无法弄清楚。

3个回答

44

我没有PHP方面的经验,但如果你想学习MongoDB Map-Reduce如何工作,那么可以看一下这个:

图片描述

如需更多信息,请查看这里


3
我该如何按县进行分组,以便只获取该州的83个县?
根据您的描述,这将需要一个distinct command
我不想使用distinct,因为我想能够按字母顺序对它们进行排序。 distinct命令将返回结果数组。如果它们还没有排序,那么排序应该很容易。
并且可能还要提取经纬度。
您想要提取什么经纬度?根据您的架构,您有城市的经纬度,但我没有看到县的经纬度。
有关如何使用map/reduce完成此操作的任何建议吗?
此时,您必须使用distinct或类似的Map/Reduce操作。
但是,我不清楚这是否会完全满足您的要求,因为我不清楚在只有城市数据的情况下,您打算如何提取县的经纬度数据。
如果您能提供一些样例输入和期望输出,那么我可能能够提供更具体的答案。

0

我是MongoDB MapReduce编程的初学者,但将尝试看看它是否有帮助,定义Map Reduce函数,

您的Map函数可能如下所示:

function() { 
   emit( this.county, {count: 1} ); 
}

你的Reduce函数应该长这样:

function(key, values) { 
    var result = {count: 0};
    //Skip aggregation step if not needed 
    values.forEach(function(value) {     
       result.count += value.count;
    }); 
    return result;  
}

通过Map Reduce传递查询条件,上述伪代码应该为您提供每个县的记录数和县列表。如果您只需要县城,请在reduce函数中跳过聚合,这样您就可以获得县城列表。
如果有更好的方法,请告诉我。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接