【问题标题】:Getting newest docs from CouchDB when looking by multiple keys通过多个键查看时从 CouchDB 获取最新文档
【发布时间】:2015-04-22 17:04:43
【问题描述】:

我需要通过查看具有多个键的视图来从 CouchDB 获取文档,例如keys=["key1", "key2","key3"]。 文档如下所示:

{
   "_id": "142410131701",
   "_rev": "1-6cac8838a4dfc2308f9d06001a899f50", 
   "s": [
       "key1", "key2", "key3"
   ]
}

这很好用。 我面临的问题是如何在数据库中获取最新的文档?我的文档 _id 实际上是一个 Unix 纪元,但我不知道如何获得按 id 排序的结果。 看起来 CouchDB 返回 btree 中匹配 key1 的第一个结果,然后是匹配 key2 的结果,等等,但最新的文档不是第一个返回的。 尝试将 _id 添加到键中也不起作用。

我现在已经用一个按_id对结果进行排序的List函数解决了这个问题,但我想知道是否有更简单有效的解决方案。 提前致谢!

【问题讨论】:

    标签: couchdb


    【解决方案1】:

    如果您将_id 添加到键中,它必须工作(当然,您必须将其添加为键数组的第一个参数,这显然会使该视图在您的情况下无用)。

    但是,如果您想要一个自动视图,该视图已经按 _id 对文档进行索引并对它们进行排序,在您的情况下,它是 _all_docs 端点,它的工作方式类似于视图。

    你的问题的答案是:

    curl http://couch.db.com/database/_all_docs?descending=true&include_docs=true&limit=15
    

    这将为您提供 15 个最新文档,响应或多或少类似于以下内容:

    {
      "rows": [
        {
           "key": "the-id",
           "id": "the-id",
           "value": {"rev": "the-rev"},
           "doc": {
             "your-document": "goes here"
           }
        },
        ...
      ]
    }
    

    【讨论】:

    • 正如我所说,我需要过滤结果,而不是所有文档。问题是视图仅按第一个键排序,而不是第二个键。但是由于我需要使用starkey和endkey来过滤's',所以我不能颠倒顺序并把id放在第一位。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多