2012-04-11 14 views
5

Toplam, sayım, min, maks ve sumsqr sağlayan yerleşik _stats işlevinin olduğunu biliyorum. Bilmek istediğim, haritayı küçültmek için sadece maks. Daha fazla bilgi olmadan çalışacak bir azaltma işlevi ile gelemiyorum.CouchDB'de Map-Reduce kullanarak Maks değeri nasıl hesaplanır?

Düşünebildiğim tek şey, değer üzerinde sıralama kullanmak ve ilk değeri seçmek.

Haritamın fonksiyonu şöyle görünür:

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

Kişisel geçici çözüm (değeriyle sıralama ve ilk veya son girişi seçmek) çözülebilir - bir görünüm anahtarına göre sıralanır, Bu nedenle, anahtar olarak null yerine doc.value göndermeniz gerekir. Ancak bu tür bir çözüm yerine, sahip olduğunuz harita işlevini uygun bir küçültme işleviyle birleştirebilirsiniz. – titanoboa

cevap

8

CouchDB wiki basit example for sum sağlar.

Değerlerin toplamı yerine, bir küçültme işlevi, değer dizisinin maksimum değerini döndürmelidir. Maksimum hesaplamak değişmeli, ilişkisel vb. Olduğundan, redikül hakkında endişelenmenize gerek yoktur.

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-Kodunun problemini çözeceğinden emin olduğum cevabı genişletmek için cevabınızı genişletme özgürlüğünü aldım. – JasonSmith

+1

Bir dizi satır için maksimum tarih bulmak için benzer bir yol var mı? – user2601010

10

Bu aynı zamanda harita fonksiyonu ile çalışmaz aşağıdaki

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