2012-04-11 11 views
5

sum、count、min、max、およびsumsqrを与える組み込みの_stats関数があります。 私が知りたいのは、map-reduceでmaxを計算する方法です。私はいくつかの情報なしで動作するreduce関数を思いつくことはできません。CouchDBでMap-Reduceを使用して最大値を計算する方法は?

私が考えることができるのは、値をソートして最初の値を選ぶことだけです。

マイマップ機能は、次のようになります。

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

あなたの回避策(値によってソートし、最初または最後のエントリを選ぶ)ことによって解決することができる - ビューをキーでソートされ、そのため、nullではなくdoc.valueをキーとして発行する必要があります。しかし、そのような回避策の代わりに、適切なreduce関数を使ってマップ関数を組み合わせることができます。 – titanoboa

答えて

8

のCouchDB wikiには、単純なexample for sumを提供します。

合計の値を返す代わりに、maxのreduce関数はvalues配列の最大値を返す必要があります。最大値の計算は可換性、結合性などのため、再削減について心配する必要はありません。

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 
} 
+0

私はPPC-Coderの問題を解決すると確信しています。 – JasonSmith

+1

同様の方法で、一連の行の最大日付を見つけることはできますか? – user2601010

10

これはまた、あなたのマップ機能では動作しません、次の

function (key, values, rereduce) { 
    return Math.max.apply({}, values); 
} 
関連する問題