当我在 Couchbase 中查询某些视图时,我得到具有以下结构的响应:
{
"total_rows":100,
"rows":[...]
}
'total_rows' 是非常有用的属性,可用于分页。但是假设我使用“start_key”和“end_key”只选择了一个视图子集,当然我不知道这个子集会有多大。'total_rows' 仍然是相同的数字(据我所知,它只是整个视图的总和)。有什么简单的方法可以知道子集中选择了多少行?
当我在 Couchbase 中查询某些视图时,我得到具有以下结构的响应:
{
"total_rows":100,
"rows":[...]
}
'total_rows' 是非常有用的属性,可用于分页。但是假设我使用“start_key”和“end_key”只选择了一个视图子集,当然我不知道这个子集会有多大。'total_rows' 仍然是相同的数字(据我所知,它只是整个视图的总和)。有什么简单的方法可以知道子集中选择了多少行?
您可以使用内置的 reduce 函数_count
来获取查询的总数。
只需_count
为您的视图添加减少功能。之后,您需要对 couchbase 进行两次调用:
reduce=true
(以及group=true
or group_level=n
,具体取决于您发送密钥的方式)。这将为您提供过滤行的总数。reduce=false
因为您现在需要实际的行。您可以在http://docs.couchbase.com/admin/admin/Views/views-writing.html找到有关 map 和 reduce 的更多详细信息
您可以使用您使用的任何语言的数组计数/总数/长度。
例如在 PHP 中:
$result = $cb->view("dev_beer", "beer_by_name", array('startkey' => 'O', 'endkey'=>'P'));
echo "total = >>".count($result["rows"])
如果您真的想对数据进行分页,那么您应该使用限制并跳过: http: //www.couchbase.com/docs/couchbase-manual-2.0/couchbase-views-writing-querying-pagination.html
如果您必须以有效的方式对视图进行分页,则实际上不需要同时指定开始和结束。
通常可以使用 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_* 值创建下一个链接,并使用其他值创建上一个链接