2014-07-10 73 views
0

我有一系列有版本字段的文档。返回最大值的文档

{ 
"_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错误。

看来我只需要通过地图功能来做到这一点,但我无法弄清楚如何从地图中返回具有最高值的单个文档。

我敢肯定有一个简单的方法来做到这一点,但我一直没能弄明白。

你能帮助我获取我的词汇表文档的最新版本吗?

回答

1

reduce_overflow_error是couchdb的方式告诉你,你没有使用它应该被使用的方式。来自wiki

Reduce是CouchDB的一个强大功能,但经常被滥用导致性能问题。从0.10开始,CouchDB使用启发式方法来检测不会缩放的减少函数,以便为开发人员提供预警。减少功能必须将输入值减小到较小的输出值。如果你在你的降低建筑的复合回报率结构,或者只变换值领域,而不是总结它,你可能会被误用此功能

试试这个地图功能

function(doc) { 
emit([doc.name,doc.version], doc._id); 

}

/view-name?include_docs=true&startkey=["glossary",{}]&endkey=["glossary"]&descending=true&limit=1

查询它这将为您提供最高版本号的文件。如果需要更多文件,请删除limit参数。