2011-08-31 2 views
4

이것이 실제로 재생성되는지는 모르겠지만 그것이 내가 여기있는 이유입니다.Couchdb는 이해와 합계를 재 계산합니다.

"afrikan"ID : f6733302df85ac109397f4b6030005bf [1,2]

"afrikan"ID : f6733302df85ac109397f4b6030006d1 [1,3]

"afrikan"ID : f6733302df85ac109397f4b6030012b6 [2

I이있을 1,4]

"중국어"ID : 1 f6733302df85ac109397f4b6030012eb

"중국어"ID : f6733302df85ac109397f4b603001d 87 1

값이 배열이 아닌 경우 합계를 계산하는 방법을 알고 있습니다 (예 : 중국어). 하지만 배열의 값을 합산 할 수는 없으며 결과는 다음과 같습니다. "afrikan" "02,41,31,2"

그리고 더 많은 질문이 있습니다. 모든 값을 더하는 방법이 있습니까? 키의 에 관계없이?

보기 코드 :

function(keys,values,rereduce) 
{ 

return sum(values); 

} 

당신에게 많은 :) 감사

UPDATE :

function(doc) { 
    if(doc.food) { 
    emit(doc.food, doc.type); 
    } 
} 

코드를 줄

내가 CouchDB를위한 해답을 발견했다.

function(doc) { 
if(doc.food) { 
if(doc.type.length>1) { 
doc.type.forEach(function(tag) { 
emit(doc.food,tag); 
}); 
}else { 
emit(doc.food,doc.type); 
} 
} 
} 

가 감소 : 여기

코드입니다 자바 스크립트가로 숫자 + 배열을 변환하기 때문에

function(keys,values) { 
return sum(values); 
} 

답변

2

당신이 얻는 이유를 "02,41,31,2"입니다 끈. 그것은 매우 이상하지만 사실입니다.

> 0 + [2, 4] + [1, 3] + [1, 2] 
'02,41,31,2' 

> sum([0, [2, 4], [1, 3], [1, 2]]) // Same result 
'02,41,31,2' 

나는 당신이 rereduce에 대해 걱정할 필요가 없다고 생각합니다. 모든 가치를 함께 추가하십시오. 배열 인 경우 배열의 모든 값을 추가하십시오.

function(keys, values, rereduce) 
{ 
    var total = 0; 
    var i, j; 

    for(i = 0; i < values.length; i++) { 
    if(typeof values[i] == "number") { 
     total = total + values[i]; 
    } 

    else { 
     for(j = 0; j < values[i].length; j++) { 
     total = total + values[i][j]; 
     } 
    } 
    } 
} 
관련 문제