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

在MongoDB中获取特定字段平均值的最快方法,mongodb,mapreduce,nosql,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("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,或者是否有其他方法?

使用组:

您需要一个用于文档的计数器,另一个用于视图总和的计数器。在finalize中,您只需对这两个数字进行除法

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 }
} );

在任何情况下都可以更快地获得平均值——预先计算它(可能您可以在后台这样做),并创建额外的字段/集合来存储它