В нашей базе данных mongodb у нас есть коллекция пользователей. Каждый пользовательский документ содержит некоторую базовую информацию о пользователе, такую как местоположение, дата рождения и пол. Он содержит несколько дополнительных свойств, но это тип данных, которые мы храним.MongoDB Scema Design - Запрос пользовательской информации и ежемесячной статистики
Мы собираем ежемесячную статистику для каждого пользователя. Есть много разных статистических данных, которые мы собираем для пользователя, но общая идея заключается в том, что для каждого месяца для каждого пользователя будет один документ. Этот документ будет содержать много разных атрибутов, содержащих в основном числовые данные. Вот пример ежемесячного документа.
{
"UserId": ObjectId(""),
"SummaryDate": ISODate("2014-09-01T04:00:00Z"),
TotalViews: 34,
Points: 300,
Growth: 20.3
}
Бизнес хотел бы запросить пользователей на основе статистики. Я использовал mongodb в прошлом, но не для этого. Моя первая мысль заключалась в том, чтобы объединить дополнительные свойства в коллекцию ежемесячных статистических данных, но хотелось узнать, что думают другие люди.
Некоторые примеры отчетов
- Дайте мне все пользователи в Мичигане, где их рост (стат в ежемесячном резюме) между началом месяца и конец месяца больше, чем X.
- Дайте мне все пользователи в Мичигане и шоу мне их статистика за месяцы июня, июля и августа в строке, и мы хотим иметь возможность сортировать по статистике за определенный месяц. Таблица будет выглядеть следующим образом:
[ Full Name | Location | June 2014 Views | June 2014 Growth | July 2015 | July 2015 Growth ]
Цените свои мысли.
EDIT: Я также должен поддерживать некоторую форму разбиения на страницы и сортировку по всем полям.
, чтобы сделать вид мерная запроса вам нужно будет либо сохранить эти атрибуты в сводных документах (если не слишком много из них, помните, что они должны быть проиндексированы, что несколько замедлит ваши записи) * или * вы могли бы запросить идентификатор пользователя для соответствующего атрибута, а затем запросить итоговую коллекцию только для идентификаторов пользователя, но это вряд ли будет масштабироваться, если у вас есть миллионы пользователей из Мичигана, например. Я бы предложил пойти с сохранением атрибутов в сводном документе. –
Спасибо. Единственная проблема, с которой я вижу, - разбиение на страницы и сортировку. Это легко, если они сортируют данные, отфильтрованные пользователем, но если они сортируются в столбце stat, они будут отсортированы пользователями, включенными в первую партию пользователя. –
Похоже, кандидат на [Агрегационный трубопровод MongoDB] (http://docs.mongodb.org/manual/core/aggregation-introduction/). – zamnuts