【发布时间】:2011-12-04 17:46:19
【问题描述】:
我在 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);
}
我尝试创建一个reduce函数
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: ..."}
我在the Definitive Guide 中读到该错误是因为您不应该从reduce 函数返回完整文档。有没有其他方法可以解决这个问题?
感谢我能得到的所有帮助。
编辑:
我只是想到了让reduce函数返回文档的_id然后通过第二个请求获取文档的丑陋解决方案。你觉得这个解决方案怎么样?如果你能找到一个好的解决方案,我会很高兴。
【问题讨论】:
标签: javascript database group-by couchdb mapreduce