У меня есть карта уменьшения:
карта:
function() {
emit(this.username, {sent:this.sent, received:this.received});
}
уменьшение:
function(key, values) {
var result = {sent: 0, received: 0, entries:0};
values.forEach(function (value) {
result.sent += value.sent;
result.received += value.received;
result.entries += 1;
});
return result;
}
Я отслеживал количество обработанных записей вКарта результатов, как вы можете видеть.Я обнаружил, что получаю гораздо меньшее количество записей, к которым обращаюсь, чем должен.
Для моего конкретного набора данных вывод выглядит примерно так:
[{u'_id ': u'1743', u'value': {u'ceived ': 1406545.0, u'sent': 26251138.0, u'entries ': 316.0}}]
Поскольку я запускаю карту, уменьшите ее с помощью параметра запроса,указав имя пользователя и диапазон дат.
Если я выполню тот же запрос с помощью db.collection.find (), как указано ниже, число будет другим:
> db.entire_database.find({username: '1743', time : { $lte: ISODate('2011-08-12 12:40:00'), $gte: ISODate('2011-08-12 08:40:00') }}).count()
1915
Полный запрос на уменьшение картыэто:
db.entire_database.mapReduce(m, r, {out: 'myoutput', query: { username: '1743', time : { $lte: ISODate('2011-08-12 12:40:00'), $gte: ISODate('2011-08-12 08:40:00') } } })
Так что, в принципе, я не уверен, почему счет так радикально отличается?Почему find () дает мне 1915, а уменьшение карты - 316?