0
나는 맵리 듀스 기능을 시험하고있어하지만 예기치 않은 동작이 있습니다예기치 않은 행동
나는 사이클이 간단한와 내 컬렉션을 채워 :
for (i=0; i<10000; i++) {db.coll.insert({'a':1,'b':2})}
그래서 나는 같은과 문서를 계산합니다 'A'값이 (이 테스트 :-)이다) 내지도 기능이
map = "function() { emit(this.a,this.b);}"
줄일 것은입니다 :
db.coll.mapReduce 호출reduce = "function (key,values) {return values.length;}"
617,451,515,(지도 감소를, {{인라인 : 밖으로 1}})
예상 값이 같은 'A', 괜찮아요 10000 개 문서입니까?
그러나 결과는 다음과 같습니다
db.coll.mapReduce(map, reduce, {out:{inline:1}})
{
"results" : [
{
"_id" : 1,
"value" : 101
}
],
"timeMillis" : 892,
"counts" : {
"input" : 10000,
"emit" : 10000,
"reduce" : 100,
"output" : 1
},
"ok" : 1,
}
경우 문제가 ??? 가치가 101 인 이유는 무엇입니까? 결과에서 감산의 의미는 무엇입니까? 도와주세요! 미리 감사드립니다 !!!
왜 101을 얻었는지 분명하지는 않지만 reduce 함수는 모든 값의 거대한 배열을 가진 각 키에 대해 단 한 번만 호출되지는 않지만 값은 그룹화 된 다음 여러 번 호출 될 수 있습니다 새로운 값 배열을 사용하여 이미 감소 된 값을 다시 줄이려면 - 100의 배치는 마지막 호출에서 값 배열의 길이를 101로 만듭니다. –