【问题标题】:"Previous" link - equivalent of LIMIT x OFFSET y?“上一个”链接 - 相当于 LIMIT x OFFSET y?
【发布时间】:2011-04-24 20:34:22
【问题描述】:

我正在使用 CouchDB 创建一个页面系统,显示:

  • 每页 10 项
  • 上一页的链接(如果有)
  • 下一页的链接(如果有)

从主题上的this article,我了解到使用skip 是次优的,我应该改用startkey 属性来指定第一个文档,从那里读取11个文档,显示前10个并使用11th 的键显示到下一页的链接。让我烦恼的是上一页的链接。文章说:

填充上一页的链接就像将当前的启动键带到下一页一样简单。如果没有之前的 startkey,我们在第一页。

这在转到下一页时有效:当我从第 4 页移动到第 5 页时,我记得上一页是 4。但是当我从第 5 页移动到第 4 页时,我没有办法 继承第 3 页的startkey。这如何工作?

是否可以(并且推荐)使用endkey 以及skip=10limit=1 来查找前一页上的第一个元素,以便我可以创建一个返回它的链接?

【问题讨论】:

    标签: pagination couchdb limit offset


    【解决方案1】:

    阅读 21 个文档而不是 11 个 - 向前多读一份,向后多读十份。第一个是上一页的钥匙。

    【讨论】:

      【解决方案2】:

      实际上,您只能要求 11 个没有 skip 的文档,这就是 Futon 所做的(查看 CouchDB 日志)。

      诀窍

      下一页和上一页链接都是相似的:startkey 是第一个或最后一个元素,带有skip=1 以避免重叠。然后您必须正确使用descending 参数来获取上一个文档或下一个文档。

      执行

      每当您请求页面时,CouchDB 都会回答十一个文档。假设第一个密钥是first,最后一个密钥是last。分页链接如下所示:

      "next": /db/_view/myview?descending=true&limit=11&startkey=last&skip=1
      "back": /db/_view/myview?descending=false&limit=11&startkey=first&skip=1
      

      等等!当descendingfalse 时,您只需在显示它们之前反转文档。 ("Finding your data with views" from the CouchDB guide 很好地解释了这些参数和 B-Tree 之间的关系。)

      奖金

      您可以轻松获取第一页或最后一页的 docid(limit=1descending 真或假),并获得一个看起来很像经典数据库的分页系统(第一页,最后一页) ,上一个,下一个)。

      【讨论】:

        猜你喜欢
        • 2022-06-21
        • 2010-09-16
        • 2011-09-29
        • 2017-12-21
        • 1970-01-01
        • 2021-04-08
        • 2011-06-18
        • 2011-08-02
        • 2014-12-12
        相关资源
        最近更新 更多