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);
}