我正在使用CouchDB创建一个页面系统,显示:
关于该主题的this article,我了解使用skip
不是最理想的,我应该使用startkey
属性来指定第一个文档,从那里读取11个文档,显示前10个并使用11 th 的键显示指向下一页的链接。困扰我的是上一页的链接。文章说:
将链接填充到上一页就像将当前的启动键带到下一页一样简单。如果没有先前的开始键,我们就在第一页。
当进入下一页时这是有效的:当我从第4页移到第5页时,我记得前一页是4.但是当我从第5页回到第4页时,我无法使用继续第3页的startkey
。这怎么可行?
是否可以(并推荐)使用endkey
以及skip=10
和limit=1
来查找上一页的第一个元素,以便我可以创建一个返回给它的链接?
答案 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à!在descending
为false
时,您只需在显示文档之前撤消文档。 ("Finding your data with views" from the CouchDB guide很好地解释了这些参数和B树之间的关系。)
您可以轻松获取第一页或最后一页的文档(limit=1
和descending
为true或false),并获得一个看起来很像古典数据库的分页系统(第一个,最后一个,上一个,下一个)。
答案 1 :(得分:0)
阅读21个文件而不是11个 - 一个额外的前进,十个后退。第一个是上一页的关键。