我无法解决MongoDB中map / reduce的工作原理。我有一个包含字段的集合:areacode, state, county, zip, city, lat, lon
列出了美国的每个邮政编码以及相应的县,州等。
我希望能够查询给定状态下的所有县或城市。所以基本上某种查询查找“State = MI”的所有记录。在这种情况下,返回了大约900条记录。我如何按县分组,以便我只获得该州的83个县?我不想使用distinct,因为我希望能够按字母顺序排序,也可能拉出lat / long。
关于如何使用map / reduce来完成此任务的任何建议?我觉得它很基本,我只是想不出来。
答案 0 :(得分:44)
答案 1 :(得分:3)
我如何按县分组,以便我得到该州的83个县?
正如您所描述的那样,这需要distinct command。
我不想使用distinct,因为我希望能够按字母顺序排序
distinct
命令将返回一组结果。如果它们尚未排序,那么对它们进行排序应该是微不足道的。
......也可能拉出纬度/经度。
你想拉出什么纬度/长度?根据你的模式,你有城市的纬度/经度,但我没有看到一个县的纬度/经度。
有关如何使用map / reduce来完成此任务的任何建议吗?
此时,您必须使用distinct
或类似的Map / Reduce操作。
但是,我不清楚这会提供您正在寻找的内容,因为当您拥有城市数据时,我不清楚您打算如何提取县的纬度/经度数据。
如果您可以提供一些样本输入和预期输出,那么我可以提供更具体的答案。
答案 2 :(得分:0)
我是MongoDB MapReduce编程的初学者,但会尝试查看它是否有帮助,定义Map Reduce函数,
您的地图功能如下:
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函数跳过聚合,在这种情况下,您应该获得县的列表。
让我知道是否有更好的方法来实现。