当前位置:  开发笔记 > 编程语言 > 正文

CouchDB中的分页?

如何解决《CouchDB中的分页?》经验,为你挑选了2个好方法。

我将如何实现分页所需的查询?

基本上,当请求第1页时,获取前5个条目.对于第2页,获取下一个5,依此类推.

我计划通过couchdb-python模块使用它,但这不会对实现产生任何影响.



1> AlexChaffee..:

该CouchDB的指南具有分页的一个很好的讨论,其中包括大量的示例代码,在这里:http://guide.couchdb.org/draft/recipes.html#pagination 这里是他们的算法:

请求rows_per_page + 1视图中的行

显示rows_per_page行,将最后一行存储为next_startkey

作为页面信息,请保持startkeynext_startkey

使用这些next_*值创建下一个链接,并使用其他链接创建上一个链接

注意:在CouchDB中获取页面的正确方法是指定一个起始键,而不是像你想象的那样的起始索引.但是你怎么知道开始第2页的关键是什么?聪明的解决方案:"不是为页面请求10行,而是请求11行,但只显示10行,并使用第11行中的值作为下一页的开始键."

如果您希望多个文档发出相同的密钥,则startdocid除了startkey正确分页外,还需要使用它们.原因是startkey单独不再足以唯一地识别行.如果您不提供,那么这些参数是无用的startkey.事实上,CouchDB将首先查看startkey参数,然后startdocid如果多个潜在的凝视行具有相同的密钥但文档ID不同,它将使用该参数进一步重新定义范围的开头.同样的事情enddocid.


这种方法的问题是你不能真正点击前几次,只有一次.当你转到下一页时,你必须手动索引所有可能的首页,或者你只能返回1页,然后你没有任何信息去往前一页.

2> Kerr..:

CouchDB HTTP View API提供了足够的范围来有效地进行分页.

最简单的方法是使用startkeycount.Count是CouchDB将为该视图请求返回的最大条目数,这取决于您的设计,startkey是您希望CouchDB启动的位置.当您请求视图时,它还会告诉您有多少条目,允许您计算如果要向用户显示该条目的页数.

因此,第一个请求不会指定启动键,只会指定要显示的条目数.然后,您可以记下返回的最后一个条目的键,并将其用作下一页的开始键.在这个简单的表单中,您将获得重叠,其中一个页面的最后一个条目是下一个页面的第一个条目.如果这不可取,那么简单地不显示页面的最后一个条目是微不足道的.

更简单的方法是使用skip参数计算页面的起始文档,但是应谨慎使用此方法.skip参数只是导致内部引擎不返回它正在迭代的条目.虽然这给出了期望的行为,但它比按键查找页面的第一个文档慢得多.跳过的文档越多,请求就越慢.


我再次编辑它.在大多数情况下,使用skip不是一个很好的方法.
看看你发布的链接,我看到没有"计数"选项.而是有一个"限制"选项.也许它被改变了?
推荐阅读
Chloemw
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有