Я относительный новичок в MongoDB, но из того, что я прочитал, есть разные методы поиска средних и сумм значений в базе данных MongoDB, с различными преимуществами и недостатками для каждого.
Прежде всего, я прошу метод нахождения суммы выбора значений и среднего значения выбора, как можно более эффективным (быстрым) методом.
Документы в запрашиваемой коллекции напоминают эту структуру (с множеством других полей):
{
"_id": ObjectId('4e650107580fd649e5000005'),
"date_added": ISODate("2011-09-05T00:00:00Z"),
"value": 1500
}
В моем приложении не всегда возможен предварительный расчет таких сумм, как суммы, потому что выбор суммируемых значений может изменяться (в зависимости от диапазонов дат - например, между начальной датой и конечной датой, каково среднее значение). Это аналогичная проблема с предварительным вычислением средних значений.
Из того, что я прочитал, MapReduce определенно не идеален для поиска в реальном времени (то есть по запросу), так что об этом тоже не может быть и речи.
В данный момент я запрашиваю коллекцию следующим образом: (примечание: это использует pymongo
)
response = request.db['somecollection'].find(
{
'date_added': {
'$gte': date_start,
'$lte': date_end
}
},
{
'value':1
}
).limit(500)
Затем выполняем вычисления в Python, используя цикл for
над ответом. Предел в 500 результатов является произвольным, чтобы он не стал слишком медленным. Я только получаю значение, и ни одно из других полей.
Это самый эффективный метод выполнения этой калькуляции, или есть другие методы для достижения того, что мне нужно?
Предостережения:
- Я не могу использовать функцию
group
, потому что, вероятно, буду использовать шардинг в будущем
- Я не могу использовать MapReduce, потому что эта функция будет использоваться пользователями на лету
- Я не могу предварительно рассчитать многие из моих сумм / средних, потому что выбор значений для суммирования / среднего почти всегда отличается
- Я просмотрел stackoverflow и Интернет, чтобы попытаться найти рекомендацию о том, как это делать, и он довольно открытый
EDIT:
Я должен отметить, что количество документов, возвращаемых по запросу, который я разместил выше, может быть любым от 1 до сотен, но, вероятно, максимальное количество возвращаемых документов будет около 150 (в среднем около 60 или 70)