我是MongoDB和Map Reduce的新手。我对每个城市都有cities
,states
和population
。
问题是找到最大的州人口。我已经做了一个查询,以获得所有州的人口,但我不能得到其人口
的最大州地图
map = function(){emit(this.state , this.pop)}
减少
reduce = function (key, values) {
var max = 1;
var pop = Array.sum(values);
if (pop > max) max = pop;
return pop;
}
运行它
db.zipcodes.mapReduce(map , reduce , {out:'result1'}).find()
答案 0 :(得分:1)
现在还不确定你是否已经弄清楚了。
这里有一些测试数据:
{
"state" : "Alabama",
"cities" : "Auburn",
"pop" : NumberInt(10)
}
{
"state" : "New York",
"cities" : "New York City",
"pop" : NumberInt(105)
}
{
"state" : "Alabama",
"cities" : "Birmingham",
"pop" : NumberInt(20)
}
在mapReduce完成后,您将在" result1"中获得这些结果:
{
"_id" : "Alabama",
"value" : 30.0
}
{
"_id" : "New York",
"value" : 105.0
}
通过使用-1(降序)对value
字段进行排序,您可以获得从最高到最低的结果。然后,如果你限制你的结果集,你可以得到第一个也是人口最多的那个。
这是完整的mapReduce:
db.zipcodes.mapReduce(
function() {
emit(this.state, this.pop)
},
function(key, values) {
var max = 1;
var pop = Array.sum(values);
if(pop > max) max = pop;
return pop;
},
{
out: 'result1'
}
).find().sort({value: -1}.limit(1);