返回具有最大值的文档

时间:2014-07-10 01:03:34

标签: couchdb

我有一系列具有版本字段的文档。

{
 "_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 个答案:

答案 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参数。