获取MongoDB中特定字段平均值的最快方法

时间:2011-06-20 16:17:03

标签: mongodb mapreduce nosql

假设我有一个如下数据集:

{ "_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,还是有另一种方式?

2 个答案:

答案 0 :(得分: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 }
} );

答案 1 :(得分:5)

在任何情况下获得平均值的更快方法 - 预先计算它(可能你可以在后台执行此操作)并创建额外的字段/集合来存储它。