У меня есть коллекция мероприятий, с user_id
и created_at
(дата ISO). Мне нужно суммировать количество объектов в день и рассчитывать только одно событие user_id
за каждый день.Группа MongoDB и отдельные
я получил следующий рабочий запрос, но его подсчета всех событий для одного пользователя, на каждый день:
results = Event.collection.aggregate([
{"$match" => {
"created_at" => {
"$gte" => start_time, "$lte" => end_time
},
"event_type" => "click"
}},
{"$group" => {
"_id" => {
"$concat" => [
{"$substr" => [{"$year" => "$created_at"}, 0, 4]},
'-',
{"$cond" => [
{"$lt" => [{"$month" => "$created_at"}, 9]},
{"$concat" => ["0", {"$substr" => [{"$month" => "$created_at"}, 0, 2]}]},
{"$substr" => [{"$month" => "$created_at"}, 0, 2]}
]},
'-',
{"$cond" => [
{"$lt" => [{"$dayOfMonth" => "$created_at"}, 9]},
{"$concat" => ["0", {"$substr" => [{"$dayOfMonth" => "$created_at"}, 0, 2]}]},
{"$substr" => [{"$dayOfMonth" => "$created_at"}, 0, 2]}
]}
]
},
"count" => {"$sum" => 1}
}}
])
Я попытался объединить его с ответом здесь: Mongoid Grouping by date
но Бесполезный Я работаю для меня.
Как я могу сделать это разным user_id
AKA игнорировать несколько записей того же дня для того же пользователя?
Благодаря
Не похоже на правильный ответ, хотя, я уверен, что есть лучший способ решить эту проблему. – Udi
Если это работает, это правильный ответ, даже если это не лучший ответ, это, безусловно, лучше, чем вообще никакого ответа. –