Я тестирую функцию mapreduce, но у меня неожиданное поведение:
Я заполнил свою коллекцию этим простым циклом for:
for (i=0; i<10000; i++) {db.coll.insert({'a':1,'b':2})}
Итак, я хочу подсчитать документы с одинаковым значением «а» (это тест :-)) Моя функция карты
map = "function() { emit(this.a,this.b);}"
и уменьшить:
reduce = "function (key,values) {return values.length;}"
Вызов db.coll.mapReduce (карта, уменьшение, {out: {inline: 1}})
ожидаемое значение — 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? В чем смысл сокращения количества результатов? Помоги мне! Заранее спасибо!!!