2015-02-17 2 views
0

У меня есть коллекция мероприятий, с 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 игнорировать несколько записей того же дня для того же пользователя?

Благодаря

+0

Не похоже на правильный ответ, хотя, я уверен, что есть лучший способ решить эту проблему. – Udi

+1

Если это работает, это правильный ответ, даже если это не лучший ответ, это, безусловно, лучше, чем вообще никакого ответа. –

ответ

1

Я получил это один работает, я просто подсчитать users_unique длину массива позже в коде.

db.events.aggregate(
    {$match: {event_type: 'click', created_at: { 
    $gte: start_time, 
    $lt: end_time 
    }}}, 
    {$project: { 
    user_id: $user_id, 
    year: {$year: $created_at}, 
    month: {$month: $created_at}, 
    day: {$dayOfMonth: $created_at} 
    }}, 
    {$group: { 
     _id: {year: $year, month: $month, day: $day}, 
     unique_users: {$addToSet: $user_id}, 
     total_sessions: {$sum: 1} 
    }} 
) 
Смежные вопросы