Я считаю, что лучше всего хранить комментарии и информацию о пользователях отдельно. Соответственно каждому комментарию прописывать ObjectID автора (ну или просто id числом). Куча запросов в данном случае совершенно не нужна. Нужно всего лишь после получения списка комментариев пройти по ним и сложить все id авторов в массив, после чего сделать ОДИН запрос, и получить всех авторов (естественно только те поля которые нужны). Примерно так:
authors = db.users.find({"_id": {"$in": authors_ids_array}}, {«nickname»: 1, «photo»: 1});
Собственно запрос по индексированному полю будет моментален, даже при большом количестве запрашиваемых пользователей. После этого соотнести комментарии с полученными пользователями я думаю уже проблем не составит :)
Отдельно по поводу хранения самих комментариев. Тут есть 2 варианта.
Если вам нужна будет возможность довольно часто делать выборку всех комментариев определенного автора, то под комментарии лучше всего создать отдельную коллекцию (то есть хранить каждый комментарий в отдельном документе), с индексированными полями author_id и topic_id. Но в таком случае количество документов в коллекции может вырасти до огромных масштабов.
Если же таких запросов не будет, либо они будут довольно редкими, то быстрее и удобнее хранить все комментарии определенного материала массивом в документе этого самого материала, и тогда не нужно будет обращаться к другой коллекции при получении материала и его комментариев. Запрос всех комментариев определенного автора в таком случае тоже возможен, хотя и будет несколько медленнее.