Как получить общее количество просмотров в 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

Другие вопросы по тегам