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

如何使用CouchDB中的Map Reduce计算最大值?,couchdb,mapreduce,Couchdb,Mapreduce,我知道有一个内置的\u stats函数可以为您提供sum、count、min、max和sumsqr。 我想知道的是如何用map-reduce的方法计算max。如果没有更多的信息,我想不出一个reduce函数 我唯一能想到的就是对值进行排序,然后选择第一个值 我的映射函数如下所示: function(doc){ emit(null, doc.value); } couchdb wiki提供了一个简单的 max的reduce函数应该返回数组中的max值,而不是返回值的总和。由于计算最大值是可交

我知道有一个内置的
\u stats
函数可以为您提供sum、count、min、max和sumsqr。 我想知道的是如何用map-reduce的方法计算max。如果没有更多的信息,我想不出一个reduce函数

我唯一能想到的就是对值进行排序,然后选择第一个值

我的映射函数如下所示:

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

couchdb wiki提供了一个简单的

max的reduce函数应该返回数组中的max值,而不是返回值的总和。由于计算最大值是可交换的、关联的等,所以您不必担心重新推导

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
}
函数(键、值、返回值){
//返回最大数值。
var max=-无穷大
对于(变量i=0;i
这也可以通过以下方法解决

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

您的解决方法(按值排序并选择第一个或最后一个条目)将不适用于映射函数-视图按键排序,因此您需要将doc.value而不是null作为键。但是,您可以将现有的map函数与适当的reduce函数结合起来,而不是采用这种解决方法。我冒昧地扩展了您的答案,以包括我确信能够解决PPC编码器问题的内容。是否有类似的方法来查找一组行的最大日期?