Puedes hacer esto:
db.collection.aggregate(
{$sort:{"time":1}},
{ $group:
{ _id: "$sessionId",
messages: { "$push": {message: "$msg", time: "$time"} }
}
}
)
Esto ordenará la colección según el tiempo y luego la agrupará por ID de sesión. Cada grupo de ID de sesión tendrá una matriz de subdocumentos que contienen el mensaje y la hora del mensaje. Al ordenar y luego presionar, los mensajes se ordenarán por tiempo en su matriz de mensajes.