У меня есть коллекция сообщений, полученных от пользователей. Я хочу сгруппировать его по последовательной последовательности userName, отсортированной по метке времени.
У меня есть сообщения о сборе, как указано ниже:
{
"_id":ObjectId("AAAA")
"userName":"Krunal"
"message":"Krunal has types some text",
"timestamp":ISODate("2019-06-17T11:57:00.000")
}
{
"_id":ObjectId("AAAB")
"userName":"Krunal"
"message":"Krunal has types some text again",
"timestamp":ISODate("2019-06-17T11:59:00.000")
}
{
"_id":ObjectId("AAAC")
"userName":"Krunal"
"message":"Krunal has types some one more time",
"timestamp":ISODate("2019-06-17T12:05:00.000")
}
{
"_id":ObjectId("AAAD")
"userName":"Karan"
"message":"Karan has type some text",
"timestamp":ISODate("2019-06-17T12:07:00.000")
}
{
"_id":ObjectId("AAAE")
"userName":"Karan"
"message":"Karan has type some more text",
"timestamp":ISODate("2019-06-17T12:10:00.000")
}
{
"_id":ObjectId("AAAC")
"userName":"Krunal"
"message":"Krunal has types some one more time",
"timestamp":ISODate("2019-06-17T12:12:00.000")
}
Я использую 4-байтовый идентификатор объекта, чтобы его было легко читать. В реальном сценарии это будет фактический идентификатор объекта, сгенерированный mongodb.
Из вышеприведенной коллекции я хочу вывод, как указано ниже:
{
"userName":"Krunal",
"count":3,
"timestamp":ISODate("2019-06-17T12:05:00.000")
}
{
"userName":"Karan",
"count":2,
"timestamp":ISODate("2019-06-17T12:10:00.000")
}
{
"userName":"Krunal",
"count":1,
"timestamp":ISODate("2019-06-17T12:12:00.000")
}
Я хочу посчитать количество последовательных сообщений от пользователя с именем пользователя
Есть ли в Mongodb какой-либо запрос для использования, или мне нужно написать отдельный алгоритм после простого запроса поиска?
EDIT:
Я не хочу группировать только по имени пользователя. Я хочу, чтобы сгруппированы по userName с последовательными документами. Например, учитывая вышеупомянутую коллекцию. Крунал отправил 3 сообщения последовательно, так что Крунал: 3, затем Каран отправил 2 сообщения последовательно, поэтому Каран: 2, Теперь Крунал отправил еще одно сообщение, но после Карана это будет новый объект как Крунал: 1, Не будет увеличить предыдущий счет Крунала