Puoi farlo:
db.collection.aggregate(
{$sort:{"time":1}},
{ $group:
{ _id: "$sessionId",
messages: { "$push": {message: "$msg", time: "$time"} }
}
}
)
Questo ordinerà la raccolta in base all'ora, quindi raggrupperà per ID sessione. Ciascun gruppo di ID di sessione avrà una matrice di documenti secondari che contengono il messaggio e l'ora del messaggio. Ordinando e poi spingendo i messaggi verranno ordinati in base al tempo nell'array dei messaggi.