Эффективный запрос mongodb для определения среднего времени в коллекции из 10 тысяч записей? - PullRequest
0 голосов
/ 28 февраля 2012

Ниже приводится одна запись коллекции с именем outputs.

db.outputs.findOne()
{
    "_id" : ObjectId("4e4131e8c7908d3eb5000002"),
    "company" : "West Edmonton Mall",
    "country" : "Canada",
    "created_at" : ISODate("2011-08-09T13:11:04Z"),
    "started_at" : ISODate("2011-08-09T11:11:04Z"),
    "end_at" : ISODate("2011-08-09T13:09:04Z")
}

Выше просто документ. Есть около 10K документов, и это будет увеличиваться.

Что мне нужно, чтобы найти среднее количество часов (с учетом параметров start_at и end_at) за последнюю 1 неделю (с учетом созданного_at)?

Ответы [ 2 ]

1 голос
/ 28 февраля 2012

Прямо сейчас вам нужно будет запросить документы, которые необходимо усреднить, вероятно, выбрав только те поля, которые вам нужны (start_at и end_at), и выполнить вычисления в коде приложения.

Если вы ждетеВ следующей основной версии MongoDB появится новая структура агрегации, которая позволит вам создать конвейер агрегации для запросов к документам, выбора полей и выполнения вычислений по ним, и, наконец, возврата вычисленных значений.это очень круто.

https://www.mongodb.org/display/DOCS/Aggregation+Framework

0 голосов
/ 29 февраля 2012

Вы можете сохранить сумму и счет в отдельной коллекции, используя оператор $ inc со значением _id, которое представляет неделю. Таким образом, вам не нужно запрашивать все записи 10k. Вы можете просто запросить коллекцию, управляющую sum & count, и разделить сумму на count, чтобы получить среднее значение.

Я подробно объяснил это в следующем посте:

http://samarthbhargava.wordpress.com/2012/02/01/real-time-analytics-with-mongodb/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...