Você consegue fazer isso:
db.collection.aggregate(
{$sort:{"time":1}},
{ $group:
{ _id: "$sessionId",
messages: { "$push": {message: "$msg", time: "$time"} }
}
}
)
Isso classificará a coleção com base no tempo e depois agrupará por id de sessão. Cada grupo de ID de sessão terá uma matriz de subdocumentos que contêm a mensagem e a hora da mensagem. Ao classificar e enviar, as mensagens serão ordenadas por tempo em sua matriz de mensagens.