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

Vic*_*let 3 pagination couchdb limit offset

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

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

这篇文章的主题,我明白使用skip是次优的,我应该使用startkey属性来指定第一个文档,从那里读取11个文档,显示前10个并使用第11 键来显示链接到下一页.困扰我的是上一页的链接.文章说:

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

此作品进入下一个页面时:当我从4页移到第5页我记得在上一个页面4,但是,当我从移动第5页回到第4页,我也没办法带过startkey页面这怎么办?

是否可以(和推荐)endkey一起使用skip=10limit=1找到上一页的第一个元素,以便我可以创建一个回链接?

Que*_*det 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
Run Code Online (Sandbox Code Playgroud)

Etvoilà!你只需要扭转时显示他们收到的文件descendingfalse.(CouchDB指南中的"使用视图查找数据"很好地解释了这些参数与B树之间的关系.)

奖金

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