【问题标题】:Return a document with the largest value返回具有最大值的文档
【发布时间】:2014-07-10 12:33:21
【问题描述】:

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

{
 "_id": "xxx",
 "_rev": "6-4bdeb530234c454ae2f16d77ba577428",
 "name": "glossary",
 "locale": "en-us",
 "version": "186.0",
 "title": "Glossary",
 ...
}

我希望能够返回 name 是具有最大版本的词汇表的文档。

如果我像这样制作地图功能:

function(doc) {
  emit(doc.name, doc);
  }

并对其进行缩减,我可以找出哪个文档具有最新版本,但是当我尝试返回它时 (return latest_doc),我得到一个 reduce_overflow_error 错误。

似乎我只需要通过地图函数来执行此操作,但我无法弄清楚如何从地图中返回具有最高值的单个文档。

我确信有一种简单的方法可以做到这一点,但我一直无法弄清楚。

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

【问题讨论】:

    标签: couchdb


    【解决方案1】:

    reduce_overflow_error 是 couchdb 的一种方式,它告诉您您没有以应有的方式使用 reduce。来自wiki

    Reduce 是 CouchDB 的一个强大功能,但经常被滥用,从而导致性能问题。从 0.10 开始,CouchDB 使用启发式方法来检测无法扩展的 reduce 函数,以便为开发人员提供早期警告。 reduce 函数必须将输入值减少为较小的输出值。如果您在 reduce 中构建复合返回结构,或者仅转换 values 字段而不是对其进行汇总,则您可能误用了此功能

    试试这个地图功能

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

    }

    查询

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-03
      • 2015-01-04
      • 2021-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多