我知道有内置的_stats
函数可以给你sum,count,min,max和sumsqr。 我想知道的是如何以地图缩小的方式计算最大值。我无法想出一个可以在没有更多信息的情况下工作的缩减功能。如何使用CouchDB中的Map-Reduce计算最大值?
我能想到的唯一的事情就是对值进行排序并选取第一个值。
我的地图功能看起来像这样:
function(doc){
emit(null, doc.value);
}
我知道有内置的_stats
函数可以给你sum,count,min,max和sumsqr。 我想知道的是如何以地图缩小的方式计算最大值。我无法想出一个可以在没有更多信息的情况下工作的缩减功能。如何使用CouchDB中的Map-Reduce计算最大值?
我能想到的唯一的事情就是对值进行排序并选取第一个值。
我的地图功能看起来像这样:
function(doc){
emit(null, doc.value);
}
CouchDB的维基提供了一个简单example for sum。
而不是返回值的总和,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
}
我冒昧地扩大您的答案,包括我很确定将解决PPC编码器的问题。 – JasonSmith 2012-04-16 14:54:01
有没有类似的方法来查找一组行的最大日期? – user2601010 2016-02-02 23:33:37
这可能是由以下
function (key, values, rereduce) {
return Math.max.apply({}, values);
}
你的解决方法(按价值分类和挑选第一个或最后一个条目),也解决了不会与您的地图功能的工作 - 这一观点得到了主要的排序,所以你需要发出doc.value而不是null作为关键字。但是,您可以将这个映射函数与适当的reduce函数结合起来,而不是这种解决方法。 – titanoboa 2012-04-11 16:37:48