我正在尝试实现分页的上一页功能,并且我认为使用endkey参数将返回上一页的行,其中最后一行将等于endkey。但是,甚至可以只使用endkey参数而不使用startkey进行查询吗?
例如:http://something.com:5984/db3/_design/app/_view/a_view?limit=5&endkey=["ABC","6L","201112"]&descending=false
当我运行此查询时,最后一行的键不等于我指定的结束键。相反,似乎CouchDB只是获取了 View 中的前5行,而完全忽略了endkey参数。
最佳答案
使用endkey
而不是startkey
的查询将像&startkey=null
一样隐式工作。也就是说,CouchDB将从第一行的第一个键开始,一直到到达结束键为止。
CouchDB始终从其开始键开始响应,并从其limit
或endkey
值(以先到者为准)停止响应。
要获取最后5行,您需要向后扫描(降序),然后您的开始键就在您需要的位置。
?limit=5&startkey=["ABC","6L","201112"]&descending=true
结果将按相反的顺序(降序!)。您可以在客户端中将它们反转(只有五行),也可以在CouchDB中编写
_list
函数来反转它们,然后再发送响应。关于具有endkey参数的CouchDB查询,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7207448/