Могу ли я одновременно считать группы и фильтровать по диапазону клавиш, используя представление CouchDB?

м с использованием CouchDB. Я'Я хотел бы иметь возможность подсчитывать вхождения значений определенных полей в пределах диапазона дат, который может быть указан во время запроса. Я, кажется, могу сделать часть этого, но яУ меня проблемы с пониманием лучшего способа собрать все это вместе.

Предполагается, что документы имеют поле метки времени и другое поле, например:

{ date: '20120101-1853', author: 'bart' }
{ date: '20120102-1850', author: 'homer'}
{ date: '20120103-2359', author: 'homer'}
{ date: '20120104-1200', author: 'lisa'}
{ date: '20120815-1250', author: 'lisa'}

Я могу легко создать представление, котороефильтрует документы по гибкому диапазону дат, Это можно сделать с помощью вида, подобного показанному ниже, который вызывается с ключевыми параметрами диапазона, например, ,_view/all-docs?startkey=20120101-0000&endkey=20120201-0000

все-документы / map.js:

function(doc) {
    emit(doc.date, doc);
}

С данными выше это вернуло бы представление CouchDB, содержащее только первые 4 документа (единственные документы в диапазоне дат).

Я также могу создать запрос, которыйподсчитывает вхождения данного поля, как это, вызывается с группировкой, то есть:_view/author-count?group=true

автор-граф / map.js:

function(doc) {
  emit(doc.author, 1);
}

автор-граф / reduce.js:

function(keys, values, rereduce) {
  return sum(values);
}

Это даст что-то вроде:

{
    "rows": [
        {"key":"bart","value":1},
        {"key":"homer","value":2}
        {"key":"lisa","value":2}
     ]
}

Тем не менее, я могуне могу найти лучший способоба фильтра по дате и количеству вхождений, Например, с данными выше, яхотелось бы иметь возможность указывать параметры диапазона, такие какstartkey=20120101-0000&endkey=20120201-0000 и получить такой результат, где последний документ исключен из подсчета, потому что он находится за пределами указанного диапазона дат:

{
    "rows": [
        {"key":"bart","value":1},
        {"key":"homer","value":2}
        {"key":"lisa","value":1}
     ]
}

Какие'самый элегантный способ сделать это? Это достижимо с помощью одного запроса? Должен ли я использовать другую конструкцию CouchDB, или для этого достаточно представления?

Ответы на вопрос(3)

Ваш ответ на вопрос