Pagination &引用;“以前的”;链接-相当于极限x偏移y?

Pagination &引用;“以前的”;链接-相当于极限x偏移y?,pagination,couchdb,limit,offset,Pagination,Couchdb,Limit,Offset,我正在使用CouchDB创建一个页面系统,显示: 每页10项 指向上一页的链接(如果有) 指向下一页的链接(如果有) 从主题开始,我了解到使用跳过是次优的,我应该使用startkey属性指定第一个文档,从那里读取11个文档,显示前10个,并使用第11个的键显示到下一页的链接。困扰我的是上一页的链接。文章说, 填充上一页的链接非常简单,只需将当前的startkey转移到下一页即可。如果没有以前的startkey,我们就在第一页 这在进入下一页时有效:当我从第4页移到第5页时,我记得上一页是第4

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

  • 每页10项
  • 指向上一页的链接(如果有)
  • 指向下一页的链接(如果有)
从主题开始,我了解到使用
跳过
是次优的,我应该使用
startkey
属性指定第一个文档,从那里读取11个文档,显示前10个,并使用第11个的键显示到下一页的链接。困扰我的是上一页的链接。文章说,

填充上一页的链接非常简单,只需将当前的startkey转移到下一页即可。如果没有以前的startkey,我们就在第一页

这在进入下一页时有效:当我从第4页移到第5页时,我记得上一页是第4页。但是当我从第5页移回第4页时,我没有办法把第3页的
startkey
带过去。这怎么行


是否可以(并且建议)使用
endkey
以及
skip=10
limit=1
查找上一页上的第一个元素,以便创建指向它的链接

阅读21份文档,而不是11份——向前多读一份,向后多读十份。第一个是上一页的关键。

事实上,您只能要求11个没有跳过的文档,而Futon就是这样做的(查看CouchDB日志)

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

行刑 无论何时你要一页,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
瞧!当
降序
时,您只需在显示文档之前将其反转即可。(很好地解释了这些参数与B树之间的关系。)

奖金 您可以很容易地获得第一页或最后一页的docid(
limit=1
descending
true或false),并获得一个分页系统,它看起来非常像经典数据库中的分页系统(first、last、previous、next)