“上一个”链接 - 相当于LIMIT x OFFSET y?

时间:2010-10-13 13:20:58

标签: pagination couchdb limit offset

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

  • 每页10个项目
  • 上一页的链接(如果有的话)
  • 指向下一页(如果有)的链接

关于该主题的this article,我了解使用skip不是最理想的,我应该使用startkey属性来指定第一个文档,从那里读取11个文档,显示前10个并使用11 th 的键显示指向下一页的链接。困扰我的是上一页的链接。文章说:

  

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

当进入下一页时这是有效的:当我从第4页移到第5页时,我记得前一页是4.但是当我从第5页回到第4页时,我无法使用继续第3页的startkey。这怎么可行?

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

2 个答案:

答案 0 :(得分:6)

事实上你只能要求11个没有skip的文件,这就是Futon所做的(看看CouchDB日志)。

诀窍

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

执行

每当您要求页面时,CouchDB会回答11个文档。假设第一个的关键是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

Etvoilà!在descendingfalse时,您只需在显示文档之前撤消文档。 ("Finding your data with views" from the CouchDB guide很好地解释了这些参数和B树之间的关系。)

加成

您可以轻松获取第一页或最后一页的文档(limit=1descending为true或false),并获得一个看起来很像古典数据库的分页系统(第一个,最后一个,上一个,下一个)。

答案 1 :(得分:0)

阅读21个文件而不是11个 - 一个额外的前进,十个后退。第一个是上一页的关键。