如何使用CouchDB中的Map-Reduce计算最大值



我知道有内置的_stats函数可以为您提供总和,计数,最小值,最大值和sumsqr。我想知道的是如何以地图缩减的方式计算最大值。我无法想出一个在没有更多信息的情况下可以工作的reduce函数。

我唯一能想到的是对值进行排序并挑选第一个值。

我的地图函数如下所示:

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

这也可以通过以下方法解决

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

couchdb wiki 提供了一个简单的求和示例。

max 的 reduce 函数应返回值数组的最大值,而不是返回值的总和。由于计算最大值是交换的、关联的等,因此您无需担心归约。

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
}

最新更新