2011-06-20 16 views
6

belirli alanın ortalamasını almak için: hızlı yolu nedirhızlı yolu en aşağıdaki gibi bir veri kümesi var diyelim MongoDB

{ "_id" : ObjectId("4dd51c0a3f42cc01ab0e6506"), "views" : 1000, "status" : 1 } 
{ "_id" : ObjectId("4dd51c0e3f42cc01ab0e6507"), "views" : 2000, "status" : 1 } 
{ "_id" : ObjectId("4dd51c113f42cc01ab0e6508"), "views" : 3000, "status" : 1 } 
{ "_id" : ObjectId("4dd51c113f42cc01ab0e6508"), "views" : 4000, "status" : 0 } 

(epeyce) görünümleri ortalama sayısını için olsun 1 durumu olan tüm belgeler? Bu gibi temel bir şey için Harita/Azalt gerekli mi, yoksa başka bir yolu var mı?

cevap

7

Kullanım grubu: http://www.mongodb.org/display/DOCS/Aggregation

görünümler toplamı için bir belgeler için sayaç ve başka gerekir. Sonuç olarak, bu iki sayı üzerinde bir bölümleme yaparsınız.

db.test.group(
    { cond: {"status": 1} 
    , initial: {count: 0, total:0} 
    , reduce: function(doc, out){ out.count++; out.total += doc.views } 
    , finalize: function(out){ out.avg = out.total/out.count } 
}); 
5

hızlı yolu her durumda ortalama almak için - o ön hesaplama (muhtemelen arka planda yapabilirsiniz) ve depolamak için ekstra alan/koleksiyon oluşturun.

+2

Sadece neden eksi merak ediyorsun? Cevabımın nesi var? –