Couchbase视图子集的行数
当我在Couchbase中查询某个视图时,得到的响应具有以下结构:Couchbase视图子集的行数,couchbase,Couchbase,当我在Couchbase中查询某个视图时,得到的响应具有以下结构: { "total_rows":100, "rows":[...] } “total_rows”是非常有用的属性,可以用于分页。 但假设我使用“开始键”和“结束键”只选择视图的一个子集,当然我不知道这个子集有多大total_rows’仍然是相同的数字(据我所知,它只是整个视图的总和)。有什么简单的方法可以知道在子集中选择了多少行吗?您可以用任何语言使用数组计数/总数/长度 例如,在PHP中: $result = $cb-
{
"total_rows":100,
"rows":[...]
}
“total_rows”是非常有用的属性,可以用于分页。
但假设我使用“开始键”和“结束键”只选择视图的一个子集,当然我不知道这个子集有多大total_rows’仍然是相同的数字(据我所知,它只是整个视图的总和)。有什么简单的方法可以知道在子集中选择了多少行吗?您可以用任何语言使用数组计数/总数/长度 例如,在PHP中:
$result = $cb->view("dev_beer", "beer_by_name", array('startkey' => 'O', 'endkey'=>'P'));
echo "total = >>".count($result["rows"])
如果您确实希望对数据进行分页,则应使用“限制并跳过”:
如果必须以有效的方式对视图分页,实际上不需要同时指定开始和结束 通常可以使用startkey/startkey\u id和limit。在这种情况下,限制将告诉您页面不会大于已知大小 这两种情况在CouchDB书中均有描述: 以下是它的工作原理:
您可以使用内置的reduce函数
\u count
获取查询的总计数
只需添加\u count
作为视图的reduce函数。之后,您需要向couchbase打两个电话:
reduce=true
(以及group=true
或group_level=n
,具体取决于您发送密钥的方式)。这将为您提供筛选行的总数reduce=false
禁用reduce函数,因为您现在需要实际的行您可以在找到有关map和reduce的更多详细信息。此变体的问题是我的子集可能很长。所以我不能只数它。我使用startKey和startDocumentId进行分页,因为skip在处理大量数据时速度非常慢。是的,按skip/limit分页需要对大多数数据库(以及SQL)进行大扫描