Couchbase视图子集的行数

时间:2013-08-08 11:07:39

标签: couchbase

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

{
  "total_rows":100,
  "rows":[...]
}

'total_rows'是非常有用的属性,可用于分页。 但是让我说我​​只选择使用'start_key'和'end_key'的视图子集,当然我不知道这个子集有多大。 'total_rows'仍然是相同的数字(据我所知,它只是整个视图的总和)。有没有简单的方法可以知道在子集中选择了多少行?

3 个答案:

答案 0 :(得分:1)

您可以使用内置的缩减功能_count来获取查询的总数。

只需将_count添加为视图的缩小功能即可。之后,您需要对couchbase进行两次调用:

  1. 在一次通话中,您将设置查询参数reduce=true(以及group=truegroup_level=n,具体取决于您发送密钥的方式)。这将为您提供已过滤行的总数。
  2. 在另一个调用中,您将使用reduce=false禁用reduce函数,因为您现在需要实际的行。
  3. 您可以在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

  

以下是它的工作原理:

     
      
  1. 从视图中请求rows_per_page + 1行
  2.   
  3. 显示rows_per_page行,存储+ 1行作为next_startkey和next_startkey_docid
  4.   
  5. 作为页面信息,请保持startkey和next_startkey
  6.   
  7. 使用next_ *值创建下一个链接,并使用其他链接创建上一个链接
  8.