我有一系列具有版本字段的文档。
{
"_id": "xxx",
"_rev": "6-4bdeb530234c454ae2f16d77ba577428",
"name": "glossary",
"locale": "en-us",
"version": "186.0",
"title": "Glossary",
...
}
我希望能够返回名称为具有最大版本的词汇表的文档。
如果我使地图的功能如下:
function(doc) {
emit(doc.name, doc);
}
并对其进行简化,我可以找出哪个文档具有最新版本,但当我尝试返回它时(return latest_doc
),我收到reduce_overflow_error
错误。
似乎我只需要通过地图功能来完成这项工作,但我无法弄清楚如何从地图中返回具有最高值的单个文档。
我确信有一种简单的方法可以做到这一点,但我无法弄明白。
您能帮助我获取我的词汇表文档的最新版本吗?
答案 0 :(得分:1)
reduce_overflow_error
是couchdb的一种方式告诉你,你没有以一种应该使用的方式使用reduce。来自wiki
Reduce是CouchDB的一个强大功能,但经常被滥用会导致性能问题。从0.10开始,CouchDB使用启发式检测缩减函数,这些函数不会扩展以给开发人员提供早期警告。 reduce函数必须将输入值减小到较小的输出值。如果要在reduce中构建复合返回结构,或仅转换值字段,而不是对其进行汇总,则可能会滥用此功能
试试这个地图功能
function(doc) {
emit([doc.name,doc.version], doc._id);
}
用
查询 /view-name?include_docs=true&startkey=["glossary",{}]&endkey=["glossary"]&descending=true&limit=1
这将为您提供具有最高版本号的文件。如果需要更多文件,请删除limit
参数。