Самый быстрый способ получить среднее значение для определенного поля в MongoDB - PullRequest
6 голосов
/ 20 июня 2011

Допустим, у меня есть набор данных, подобный следующему:

{ "_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 ]

7 голосов
/ 20 июня 2011

Группа использования: 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 голосов
/ 20 июня 2011

Более быстрый способ получить среднее значение в любом случае - предварительно рассчитать его (вероятно, вы можете сделать это в фоновом режиме) и создать дополнительное поле / коллекцию для его хранения.

...