PPC-Coder
PPC-Coder

Reputation: 3632

How to calculate Max value using Map-Reduce in CouchDB?

I know there's the built-in _stats function that gives you sum, count, min, max, and sumsqr. What I'd like to know is how to calculate just the max in a map-reduce way. I can't come up with a reduce function that will work without some more information.

The only thing I can think of is to use sorting on the value and pick off the first value.

My map function looks like this:

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

Upvotes: 6

Views: 10087

Answers (2)

red_trumpet
red_trumpet

Reputation: 611

This may be also solved by the following

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

Upvotes: 12

titanoboa
titanoboa

Reputation: 2588

The couchdb wiki provides a simple example for sum.

Instead of returning the sum of values, a reduce function for max should return the max of the values array. Since calculating the maximum is commutative, associative etc. you do not need to worry about rereduce.

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
}

Upvotes: 8

Related Questions