当我在Couchbase中查询某个视图时,我得到了具有以下结构的响应:
{
"total_rows":100,
"rows":[...]
}
'total_rows'是非常有用的属性,可用于分页。 但是让我说我只选择使用'start_key'和'end_key'的视图子集,当然我不知道这个子集有多大。 'total_rows'仍然是相同的数字(据我所知,它只是整个视图的总和)。有没有简单的方法可以知道在子集中选择了多少行?
答案 0 :(得分:1)
您可以使用内置的缩减功能_count
来获取查询的总数。
只需将_count
添加为视图的缩小功能即可。之后,您需要对couchbase进行两次调用:
reduce=true
(以及group=true
或group_level=n
,具体取决于您发送密钥的方式)。这将为您提供已过滤行的总数。reduce=false
禁用reduce函数,因为您现在需要实际的行。您可以在http://docs.couchbase.com/admin/admin/Views/views-writing.html
找到有关map和reduce的更多详细信息答案 1 :(得分:0)
您可以使用您正在使用的任何语言的数组计数/总数/长度。
例如在PHP中:
$result = $cb->view("dev_beer", "beer_by_name", array('startkey' => 'O', 'endkey'=>'P'));
echo "total = >>".count($result["rows"])
如果您真的想要对数据进行分页,那么您应该使用limit并跳过: http://www.couchbase.com/docs/couchbase-manual-2.0/couchbase-views-writing-querying-pagination.html
答案 2 :(得分:0)
如果必须以有效的方式对视图进行分页,则实际上不需要同时指定开始和结束。
通常可以使用startkey / startkey_id和limit。在这种情况下,限制将告诉您页面不会大于已知大小。
这两种情况都在CouchDB书中描述:http://guide.couchdb.org/draft/recipes.html#pagination
以下是它的工作原理:
- 从视图中请求rows_per_page + 1行
- 显示rows_per_page行,存储+ 1行作为next_startkey和next_startkey_docid
- 作为页面信息,请保持startkey和next_startkey
- 使用next_ *值创建下一个链接,并使用其他链接创建上一个链接
醇>