Możesz to zrobić:
db.collection.aggregate(
{$sort:{"time":1}},
{ $group:
{ _id: "$sessionId",
messages: { "$push": {message: "$msg", time: "$time"} }
}
}
)
Spowoduje to posortowanie kolekcji na podstawie czasu, a następnie pogrupowanie według identyfikatora sesji. Każda grupa identyfikatorów sesji będzie miała tablicę dokumentów podrzędnych, które zawierają wiadomość i czas wiadomości. Po sortowaniu wiadomości zostaną posortowane według czasu w tablicy wiadomości.