Couchbase视图子集的行数

Couchbase视图子集的行数,couchbase,Couchbase,当我在Couchbase中查询某个视图时,得到的响应具有以下结构: { "total_rows":100, "rows":[...] } “total_rows”是非常有用的属性,可以用于分页。 但假设我使用“开始键”和“结束键”只选择视图的一个子集,当然我不知道这个子集有多大total_rows’仍然是相同的数字(据我所知,它只是整个视图的总和)。有什么简单的方法可以知道在子集中选择了多少行吗?您可以用任何语言使用数组计数/总数/长度 例如,在PHP中: $result = $cb-

当我在Couchbase中查询某个视图时,得到的响应具有以下结构:

{
  "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书中均有描述:

以下是它的工作原理:

  • 每个页面请求行数+视图中的1行
  • 按每页行显示行,将+1行存储为下一个\u开始键和下一个\u开始键\u文档ID
  • 作为页面信息,保留startkey和next_startkey
  • 使用next_*值创建下一个链接,并使用其他值创建上一个链接

  • 您可以使用内置的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)进行大扫描