Depende.
Depende de quantos de cada um desses tipos de objetos você espera ter. Você pode encaixá-los todos em um único documento MongoDB para um determinado tópico? Provavelmente não.
Depende dos relacionamentos - você tem relacionamentos um-para-muitos ou muitos-para-muitos? Se for um para muitos e o número de entidades relacionadas for pequeno, você pode optar por incorporá-las em um IList em um documento. Se for muitos para muitos, você pode optar por usar um relacionamento mais tradicional ou pode optar por incorporar ambos os lados como IListas.
Você ainda pode modelar relacionamentos no MongoDB com coleções separadas, MAS não há junções no banco de dados, então você precisa fazer isso no código. Carregar um tópico e, em seguida, carregar os comentários para ele pode ser bom do ponto de vista do desempenho.
Outras dicas:
Com o MongoDB você pode indexar INTO arrays em documentos. Portanto, não pense em um índice como sendo apenas um índice em um campo simples em um documento (como SQL). Você pode usar, digamos, uma coleção de tags em um tópico e indexar nas tags. (Consulte http://www.mongodb.org/display/DOCS/Indexes #Indexes-Arrays )
Quando você recupera ou grava dados, pode fazer uma leitura parcial e uma gravação parcial de qualquer documento. (consulte http://www.mongodb.org/display /DOCS/Recuperando+a+Subconjunto+de+Campos )
E, finalmente, quando você não consegue ver como obter o que deseja usando coleções e índices, pode conseguir usando map reduce. Por exemplo, para encontrar todas as tags atualmente em uso classificadas por sua frequência de uso, você mapearia cada Tópico emitindo as tags usadas nele e, em seguida, reduziria esse conjunto para obter o resultado desejado. Você pode então armazenar o resultado dessa redução de mapa permanentemente e atualizá-lo apenas quando necessário.
É uma mudança de mente bastante significativa do pensamento relacional, mas vale a pena se você precisar da escalabilidade e flexibilidade que uma abordagem NOSQL traz.