当我使用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,所以如果我想实现分页,我怎样才能得到总数,所以它对分页很有用。
答案 0 :(得分:1)
total_rows
包含未过滤的计数,因此它应该等于subscribed
条目的总数(所有[user,report]
对)。
如果你想进行有效的分页,你不应该使用skip(n)
,因为它会强制索引扫描n
第一行并丢弃它们。
你应该做的是使用startkey
,startkey_docid
和limit
(实际上你会使用skip(1)
来摆脱上一页的最后一个结果)。
在此博客文章中详细解释了这一点:http://blog.couchbase.com/pagination-couchbase