지도 축소 기능을 사용하고 있습니다. 문제는 만약 그렇다면 문서의 입력이 100을 넘으면 예상되는 번호가 표시되지 않습니다. 결과가 아니라면 입력 문서가 < = 100이면 예상대로 결과를 얻고 있습니다. 사용자에 대한 < = 100 문서 (ID : 5504)에있을 경우 : 나는 점점 오전Mongodb -지도 - 축소 - 전체 데이터가 반환되지 않습니다.
샘플 출력 :
{
"_id" : "5504",
"value" : [
ObjectId("51c921bae4b0f0f776b339d2"),
ObjectId("51b06b5be4b021e44bc69755")
]
}
문제는, 나는 많은 어떤 것을 얻고있다. 출력 배열의 ID 수는 문서> 100 이상이면 출력 배열에 ID가 거의 없습니다. 나는 위의 결과를 얻었다. 이 사용자의 문서 수는 101 개 였지만 100 일 때 100 개의 ID를 받았습니다. 왜이 이상한 행동과 이것에 대한 해결책이 무엇입니까?
지도 기능 :
db.system.js.save({
_id: "map1",
value: function() {
var value = {
"data": [{
"_id": this._id,
"creation_time": this.creation_time
}]
};
emit(this.user_id, value);
}
});
감소 기능 :
db.system.js.save({
_id: "reduce1",
value: function (key, values) {
var reducedValue = [];
for (var i = 0; i < values.length; i++) {
reducedValue.push({
"_id": values[i].data[0]._id,
"creation_time": values[i].data[0].creation_time
});
}
return {
data: reducedValue
};
}
});
의 Finalize 기능 :
db.system.js.save({
_id: "finalize1",
value: function (key, reducedValue) {
var a = reducedValue.data.sort(compare1);
var ids = [];
for (var i = 0; i < a.length; i++) {
ids.push(a[i]._id);
}
return ids;
}
});
비교 기능 :
db.system.js.save({
_id: "compare1",
value: function (a, b) {
if (a.creation_time < b.creation_time) return 1;
if (a.creation_time > b.creation_time) return -1;
return 0;
}
});
맵리 듀스() 함수 많은 시간을 단축 부를 수 MongoDB를 이후
db.notifications.mapReduce(map1, reduce1, {out: "notifications_result", query: {delivered:true, user_id:"5504"}, finalize: finalize1});
나는 이것이 당신을 도울 수 있다고 생각합니다 : http://stackoverflow.com/questions/13318791/mapreduce-results-seem-limited-to-100 –
그리고 this this too : http://stackoverflow.com/questions/9896349/what-is-wrong-with-this-map-reduce-query-on-mongo –