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