2011-06-20 23 views
6

比方說,我有一個像下面這樣的數據集:最快的方式來獲得一個特定領域的平均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 } 

什麼是最快的方式(性能明智)獲得的意見的平均數所有狀態爲1的文件?對於像這樣基本的東西需要Map/Reduce還是有其他方法?

回答

7

用組:http://www.mongodb.org/display/DOCS/Aggregation

你需要的文件的意見總和計數器和另一個。在最後確定你只是對這兩個數字進行分割。在任何情況下

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

更快的方式來獲得平均 - 預先計算它(可能是您可以在後臺做到這一點),並創建額外的字段/收集儲存。

+2

只是想知道爲什麼減號?我的回答有什麼問題? –

相關問題