如何在mongoDB中对结果mapReduce进行排序和限制

时间:2017-02-16 04:30:50

标签: mongodb mapreduce mongodb-query

我是MongoDB和Map Reduce的新手。我对每个城市都有citiesstatespopulation

问题是找到最大的州人口。我已经做了一个查询,以获得所有州的人口,但我不能得到其人口

的最大州

地图

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()

1 个答案:

答案 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);