У меня есть несколько документов в CouchDB, которые содержат дату и путь.Мне нужно представление, где я могу искать по пути (возможно, используя startkey и endkey), и для этого пути я хочу, чтобы представление возвращало документ, где дата является самой последней.
Небольшой пример того, как выглядят мои данныекак
{
"path": "abc",
"created_at": "2011-12-03T18:23:49.058Z"
}
{
"path": "abc",
"created_at": "2011-12-03T11:32:42.123Z"
}
{
"path": "cde",
"created_at": "2011-12-06T15:52:34.523Z"
}
Моя текущая функция карты
function(doc) {
var pathArr = doc.path.split(/\/|\\/);
pathArr.splice(0,1);
emit(pathArr, doc);
}
Моя попытка создать функцию уменьшения
function(keys, values) {
var currTime = -Infinity;
var retDoc;
for (var i = 0, v; v = values[i]; i++) {
var dateInMs = new Date(v.created_at).getTime();
//if this doc has a later than than previously latest date found
if(dateInMs >= currTime)
{
currTime = dateInMs;
retDoc = v;
}
}
return retDoc;
}
Это приводит к ошибке
{"error":"reduce_overflow_error","message":"Reduce output must shrink more rapidly: Current output: ..."}
Я прочитал в Детальном руководстве , что ошибка возникает из-за того, что вы не должны возвращать полный документ из функции сокращения.Есть ли другой способ решить эту проблему?
Я ценю любую помощь, которую могу получить.
РЕДАКТИРОВАТЬ:
Я только что подумал об уродливом решении, позволяющем функции Reduce возвращать _id документа, а затем с помощью второго запроса извлечь документ.Что вы думаете об этом решении?Если бы вы могли найти хорошее решение для этого вместо этого, я был бы очень рад.