Tengo varios documentos CouchDB que representan una marca de tiempo con una propiedad userId y etiqueta (un usuario puede tener n marcas de tiempo y asignarle una etiqueta a cada uno). Quiero consultar CouchDB por un userId específico y obtener una lista ordenada de las etiquetas que el usuario ha utilizado (ordenados por ocurrencia).CouchDB Ver equivalente de SUM & GROUP POR
¿Cómo se vería la vista?
Si quiero obtener una lista de todas las etiquetas ordenados por ocurrencia (no importa de qué usuario) o si suponemos que sólo hay documentos con el mismo ID de usuario, que lo haría así:
mapa:
function(doc) {
if(doc.tag) emit(doc.tag, 1);
}
Reducir:
function(keys, values) {
return sum(values);
}
pero ¿cómo puedo agrupar el resultado para que pueda filtrar la consulta por un userId específico?
Solo para agregar a eso, puede usar el parámetro de vista 'group_level' para lograr diferentes niveles de granularidad para sus cálculos de reducción. Probablemente esto se demuestre mejor si usa una fecha como matriz para su clave. '[año, mes, día]'. En este caso, 'group_level = 1' obtendrá el agregado para el año,' group_level = 2' irá por mes y 'group_level = 3' será por día. –
Y otra cosa, si solo usa '_sum' como función de reducción, CouchDB automáticamente usará una función de Erlang preescrita que funcionará mucho más rápido que el equivalente de JavaScript. (otros ejemplos todos documentados [aquí] (http://wiki.apache.org/couchdb/Built-In_Reduce_Functions)) –
Esto no ordena por ocurrencia, sin embargo. –