¿La mejor manera de almacenar / obtener valores referenciados de una lista en Mongo / RectiveMongo?

Tengo un caso de uso bastante común: una lista de comentarios. Cada comentario tiene un autor.

Estoy almacenando la referencia de un comentario al autor utilizando una referencia, ya que un autor puede hacer varios comentarios.

Ahora estoy trabajando con ReactiveMongo y quiero tratar de mantener el acceso a la base de datos asíncrono, pero en este caso, no sé cómo. Hago un acceso asíncrono a la base de datos para obtener los comentarios, pero luego, para cada comentario, tengo que obtener al autor, y hasta ahora la única forma que conozco es recorrer los comentarios y obtener al usuario de forma sincrónica:

val userOption:Option[JsObject] = Await.result(usersCollection.find(Json.obj("id" -> userId).one[JsObject], timeout)
//...

Aparte de eso, podría:

Obtener a cada usuario de forma asíncrona, pero luego tengo que introducir alguna funcionalidad para esperar hasta que todos los usuarios hayan sido buscados, a fin de devolver la respuesta, y es probable que mi código se convierta en un desastre.

Almacene el objeto de usuario completo, al menos lo que necesito para el comentario (imagen, nombre y demás) en cada comentario. Esta redundancia podría ser problemática de administrar, ya que cada vez que un usuario cambia algo (relevante para los datos almacenados en los comentarios) tendría que revisar todos los comentarios en la base de datos y modificarlos.

¿Cuál es el patrón correcto para aplicar aquí?

Respuestas a la pregunta(1)

Su respuesta a la pregunta