我知道有內置的_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