2012-04-11 90 views
5

Sé que existe la función incorporada _stats que le da suma, cuenta, mín., Máx. Y sumsqr. Lo que me gustaría saber es cómo calcular solo el máximo de una manera de reducir mapas. No puedo crear una función de reducción que funcione sin más información.Cómo calcular el valor máximo usando Map-Reduce en CouchDB?

Lo único que se me ocurre es usar la clasificación en el valor y elegir el primer valor.

Mi función de mapa se ve así:

function(doc){ 
    emit(null, doc.value); 
} 
+1

Su solución (clasificación por valor y recoger la primera o la última entrada) no funcionará con su función de mapa - una vista está ordenada por la clave, por lo que necesitaría emitir doc.value en lugar de null como una clave. Pero en lugar de tal solución, puede combinar la función de mapa que tiene con una función de reducción apropiada. – titanoboa

Respuesta

8

El couchdb wiki proporciona un simple example for sum.

En lugar de devolver la suma de valores, una función de reducción para max debe devolver el máximo de la matriz de valores. Como el cálculo del máximo es conmutativo, asociativo, etc., no necesita preocuparse por la reducción.

function (key, values, rereduce) { 
    // Return the maximum numeric value. 
    var max = -Infinity 
    for(var i = 0; i < values.length; i++) 
     if(typeof values[i] == 'number') 
      max = Math.max(values[i], max) 
    return max 
} 
+0

Me tomé la libertad de ampliar su respuesta para incluir lo que estoy bastante seguro de que resolverá el problema de PPC-Coder. – JasonSmith

+1

¿Hay alguna manera similar de encontrar la fecha máxima para un conjunto de filas? – user2601010

10

Esto puede también resolverse mediante el siguiente

function (key, values, rereduce) { 
    return Math.max.apply({}, values); 
} 
Cuestiones relacionadas