2017-02-16 1 views
1

MongoDB 및 Map Reduce에 익숙합니다. 각 도시마다 cities, statespopulation이 있습니다.mongoDB에서 결과 mapReduce를 정렬 및 제한하는 방법

질문은 가장 큰 주 인구를 찾는 것입니다. 나는 그들의 인구를 가진 모든 주를 얻기 위해 쿼리를 수행했지만 나는

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

은 다음과 같습니다

{ 
    "_id" : "Alabama", 
    "value" : 30.0 
} 
{ 
    "_id" : "New York", 
    "value" : 105.0 
} 

-1로 value 필드에 정렬하여 (내림차순) 당신은 결과를 최고에서 최저로 얻을 것입니다. 그런 다음 결과 집합을 제한하면 가장 높은 인구수를 가진 첫 번째 것을 정확하게 얻을 수 있습니다.

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); 
: 여기

는 전체 맵리 듀스입니다
관련 문제