Каждый раз, когда пользователь входит в систему или выходит из системы, событие сохраняется в монго.Пользователь может входить и / или выходить из системы несколько раз в день.
Например, Боб имеет вход в систему 2 раза и выход из системы 1 раз:
{
username: ‘bob’,
type: ‘login’,
eventDate: ISODate(‘2018-09-21T12:39:50.676Z’)
}
{
username: ‘bob’,
type: ‘login’,
eventDate: ISODate(‘2018-09-21T13:55:50.676Z’)
}
{
username: ‘bob’,
type: ‘logout,
eventDate: ISODate(‘2018-09-21T22:10:50.676Z’)
}
И у Джеймса есть только 1 событие входа в систему:
{
username: ‘james’,
type: ‘login,
eventDate: ISODate(‘2018-09-21T10:10:50.676Z’)
}
Я хотел бы выполнить запрос, который будет извлекать первый логин дня и последний выход дня для каждого пользователя для каждого дня (скажем, на прошлой неделе).
Таким образом, результат будет выглядеть так:
[{
username: ‘bob’,
firstLogin: ISODate(‘2018-09-21T12:39:50.676Z’),
lastLogout: ISODate(‘2018-09-21T22:10:50.676Z’)
}
{
username: ‘james’,
firstLogin: ISODate(‘2018-09-22T10:19:50.676Z’),
lastLogout: null,
}]
Я считаю, что мне приходится иметь дело с «агрегацией», но я не уверен.