Как получить общее количество просмотров в couchbase
Когда я запрашиваю некоторое представление в Couchbase, используя параметры user_id(key), limit(10) и skip(0), я получаю ответ, имеющий следующую структуру:
{
"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 ответ
total_rows
содержит нефильтрованный счет, поэтому он должен быть равен общему количеству subscribed
записи (все [user,report]
пар).
если вы хотите сделать эффективную нумерацию страниц, вы не должны использовать skip(n)
потому что это заставляет индекс сканировать n
Первые строки и отбросить их.
вместо этого вы должны использовать startkey
, startkey_docid
а также limit
(ну, на самом деле вы бы использовали skip(1)
избавиться от последнего результата предыдущей страницы).
это объясняется довольно подробно в этом блоге: http://blog.couchbase.com/pagination-couchbase