3

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

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

这篇关于该主题的文章中,我了解到使用skip是次优的,我应该使用startkey属性来指定第一个文档,从那里读取 11 个文档,显示前 10 个并使用第 11的键来显示链接到下一页。让我烦恼的是上一页的链接。文章说:

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

这在转到下一页时有效:当我从第 4 页移动到第 5 页时,我记得上一页是 4。但是当我从第 5 页移动到第 4 页时,我无法结转startkey页面3. 这怎么行?

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

4

2 回答 2

6

实际上,您只能要求 11 个没有 no 的文档skip,这就是 Futon 所做的(查看 CouchDB 日志)。

诀窍

下一页和上一页链接都将相似:startkey是第一个或最后一个元素,用 askip=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

瞧!您只需要在显示文档之前反转文档 when descendingis false。(CouchDB 指南中的“使用视图查找数据”很好地解释了这些参数和 B 树之间的关系。)

奖金

您可以轻松获取第一页或最后一页的 docid(limit=1以及descendingtrue 或 false),并获得一个看起来很像经典数据库(第一页、最后一页、上一页、下一页)的分页系统。

于 2010-10-22T12:23:21.000 回答
0

阅读 21 个文档而不是 11 个文档 - 向前多读 1 个,向后读 10 个。第一个是上一页的钥匙。

于 2010-10-19T11:17:16.450 回答