如何在couchbase视图中获得总计数

时间:2015-07-30 10:27:56

标签: couchbase couchbase-view

当我使用user_id(key),limit(10)和skip(0)参数查询Couchbase中的某个视图时,我得到具有以下结构的响应:

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

以下是我根据user_id返回报告列表的观点: -

function map(doc, meta) {
    if (doc.type == 'report' && doc.subscribed) {
        for (var subscriber in doc.subscribed) {
            emit(subscriber, doc);
        }
    }
}

以下是示例报告文档: -

{
   "agree_allowed":true,
   "assigned_by":"",
   "assigned_to":"",
   "closed":[

   ],
   "comments_allowed":true,
   "details":"Test",
   "email":"",
   "status":"In Progress",
   "subscribed":{
      "user_cfd29b81f0263a380507":true,
      "user_cfd29b81f0263a380508":true,
      "user_cfd29b81f0263a380509":true,
      "user_cfd29b81f0263a3805010":true
   },
   "summary":"Test",
   "time_open":0,
   "timestamp":"2015-07-17T15:34:30.864Z",
   "type":"report",
   "user_id":"user_cfd29b81f0263a380507",
   "username":"test17"
}

但行数是3,所以如果我想实现分页,我怎样才能得到总数,所以它对分页很有用。

1 个答案:

答案 0 :(得分:1)

total_rows包含未过滤的计数,因此它应该等于subscribed条目的总数(所有[user,report]对)。

如果你想进行有效的分页,你不应该使用skip(n),因为它会强制索引扫描n第一行并丢弃它们。

你应该做的是使用startkeystartkey_docidlimit(实际上你会使用skip(1)来摆脱上一页的最后一个结果)。

在此博客文章中详细解释了这一点:http://blog.couchbase.com/pagination-couchbase