Usando uma visualização do CouchDB, posso contar grupos e filtrar por intervalo de chave ao mesmo tempo?

Estou usando o CouchDB. Gostaria de poder contar ocorrências de valores de campos específicos dentro de um intervalo de datas que podem ser especificados no momento da consulta. Eu pareço ser capaz de fazer parte disso, mas estou tendo dificuldade em entender a melhor maneira de reunir tudo isso.

Supondo documentos que tenham um campo de carimbo de data e hora e outro campo, por exemplo:

{ 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'}

Eu posso facilmente criar uma visão quefiltra documentos por um período flexível. Isso pode ser feito com uma visão como a abaixo, chamada com parâmetros de intervalo de chave, por exemplo,_view/all-docs?startkey=20120101-0000&endkey=20120201-0000.

all-docs / map.js:

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

Com os dados acima, isso retornaria uma visualização do CouchDB contendo apenas os primeiros 4 documentos (os únicos documentos no intervalo de datas).

Eu também posso criar uma consulta queconta ocorrências de um determinado campo, assim, chamado com agrupamento, ou seja,_view/author-count?group=true:

author-count / map.js:

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

author-count / reduce.js:

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

Isso produziria algo como:

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

No entanto, não consigo encontrar a melhor maneira defiltrar por data e contar ocorrências. Por exemplo, com os dados acima, eu gostaria de poder especificar parâmetros de intervalo comostartkey=20120101-0000&endkey=20120201-0000 e obtenha um resultado como este, em que o último documento é excluído da contagem porque está fora do intervalo de datas especificado:

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

Qual é a maneira mais elegante de fazer isso? Isso é possível com uma única consulta? Devo estar usando outra construção do CouchDB ou uma exibição suficiente para isso?

questionAnswers(3)

yourAnswerToTheQuestion