/ / CouchDB Group Level e Key Range - nosql, couchdb, couchbase

Nível de grupo e intervalo de chaves do CouchDB - nosql, couchdb, couchbase

Alguém pode me explicar por que o seguinte não funciona:

Supondo a seguinte estrutura de documento:

{
"_id": "520fb089a6cb538b1843cdf3cca39a15",
"_rev": "2-f96c27d19bf6cb10268d6d1c34799931",
"type": "nosql",
"location": "AZ",
"date": "2012/03/01 00:00:00",
"amount": 1500
}

E uma função Map definida da seguinte forma:

function(doc) {
var saleDate = new Date(doc.date);
emit([doc.location,saleDate.getFullYear(),saleDate.getMonth()+1],doc.amount);
}

E usando o built-in _sum função para o redutor.

Quando você executa isso (com group = true), obtém resultados como este:

{"rows":[
{"key":["AZ",2012,2],"value":224},
{"key":["AZ",2012,3],"value":1500},
{"key":["WA",2011,12],"value":1965},
{"key":["WA",2012,1],"value":358}
]}

Agora, se você alterar a consulta para algo assim:

http://127.0.0.1:5984/default/_design/nosql/_view/nosql_test?group_level=2

Você obtém resultados como este:

{"rows":[
{"key":["AZ",2012],"value":1724},
{"key":["WA",2011],"value":1965},
{"key":["WA",2012],"value":358}
]}

Então, com isso em mente, se eu quisesse descobrir todas as vendas de 2011 para o "WA", não seria possível executar algo assim:

http://127.0.0.1:5984/default/_design/nosql/_view/nosql_test?group_level=2&key=["WA",2011]

Este exemplo foi retirado dos vídeos úteis das fitas NoSQL.

http://nosqltapes.com/video/understanding-mapreduce-with-mike-miller

Respostas:

8 para resposta № 1

Você sempre precisa fornecer um intervalo de chaves, porque a filtragem é feita em map"s resultados, não em reduce.

Por exemplo, os seguintes parâmetros devem funcionar (se codificados corretamente por URL):

?group_level=2&startkey=["WA",2011]&endkey=["WA",2011,{}]

Você pode ler sobre ver agrupamento para entender como isso funciona.