queries couchdb

queries - ¿Cuál es el equivalente de CouchDB de la función agregada COUNT(*) de SQL?



design view couchdb (2)

En su reducir solo poner:

_contar

También puede obtener una suma utilizando:

_suma

así que básicamente reduzca: "_sum" o reduzca: "_count" y asegúrese de que el valor que emite su mapa sea un entero válido (valor numérico)

Consulte "Funciones reducidas integradas" .

Sí, soy un jockey SQL (sorta) que ingresa al mundo CouchDb Map / Reduce. Pensé que había descubierto cómo el equivalente de la función de agregador de SQL COUNT (*) para los conjuntos de datos CouchDB con lo siguiente:

Mapa:

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

Reducir:

function(keys, values, rereduce){ return values.length; }

Lo que pensé funcionó, devolviendo algo como:

"super fun C" 2 "super fun D" 2 "super fun E" 2 "super fun F" 18

... pero no realmente. Cuando agrego un registro, este conteo varía enormemente. A veces el conteo en realidad disminuye , lo cual fue muy sorprendente. ¿Estoy haciendo algo mal? Tal vez no entiendo completamente el concepto de consistencia eventual?


Parece que sus resultados reducidos se están reduciendo. Es decir, reduce se llama más de una vez para cada clave y luego se vuelve a llamar con esos resultados. Puedes manejar eso con una función de reduce como esta:

function(keys, values, rereduce) { if (rereduce) { return sum(values); } else { return values.length; } }

Alternativamente, puede cambiar la función de map para que los valores sean siempre un conteo de documentos:

// map function(doc) { emit(doc.name, 1); } // reduce function(keys, values, rereduce) { return sum(values); }