2017-02-16 5 views
1

Я новичок в MongoDB и Map Reduce. У меня есть cities, states и population для каждого города.Как сортировать и ограничивать отображение результатаReduce in mongoDB

Вопрос заключается в том, чтобы найти самое большое население штата. Я сделал запрос, чтобы получить все государства с их населением, но я не мог получить только максимальное состояние с населением

Карта

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

Не уверен, что вы уже поняли это.

Вот некоторые тестовые данные:

{ 
    "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 
} 

Сортируя на value поле с -1 (по убыванию) вы получите результаты от самого высокого до самого низкого. Тогда, если вы ограничите свой набор результатов, вы можете получить именно тот, который также является самым высоким с населением.

Вот полный 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);