2

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

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

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

4

3 回答 3

2

您可以使用内置的 reduce 函数_count来获取查询的总数。

只需_count为您的视图添加减少功能。之后,您需要对 couchbase 进行两次调用:

  1. 在一次调用中,您将设置查询参数reduce=true(以及group=trueor group_level=n,具体取决于您发送密钥的方式)。这将为您提供过滤行的总数。
  2. 在另一个调用中,您将禁用 reduce 函数,reduce=false因为您现在需要实际的行。

您可以在http://docs.couchbase.com/admin/admin/Views/views-writing.html找到有关 map 和 reduce 的更多详细信息

于 2016-08-24T07:20:08.200 回答
0

您可以使用您使用的任何语言的数组计数/总数/长度。

例如在 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

于 2013-08-09T09:18:36.050 回答
0

如果您必须以有效的方式对视图进行分页,则实际上不需要同时指定开始和结束。

通常可以使用 startkey/startkey_id 和 limit。在这种情况下,限制会告诉您页面不会大于已知大小。

这两种情况都在 CouchDB 书中进行了描述:http: //guide.couchdb.org/draft/recipes.html#pagination

下面是它的工作原理:

  1. 从视图中请求 rows_per_page + 1 行
  2. 显示 rows_per_page 行,将 + 1 行存储为 next_startkey 和 next_startkey_docid
  3. 作为页面信息,保留 startkey 和 next_startkey
  4. 使用 next_* 值创建下一个链接,并使用其他值创建上一个链接
于 2013-08-19T17:11:18.867 回答