状況によります。
それはあなたが持っていると期待するこれらのタイプのオブジェクトのそれぞれの数に依存します。それらすべてを特定のトピックの単一のMongoDBドキュメントに収めることができますか?おそらくそうではありません。
それは関係に依存します-あなたは1対多または多対多の関係を持っていますか? 1対多で、関連するエンティティの数が少ない場合は、それらをドキュメントのIListに埋め込むことを選択できます。多対多の場合は、より伝統的な関係を使用することを選択するか、IListsとして両側を埋め込むことを選択する可能性があります。
個別のコレクションを使用してMongoDBで関係をモデル化することはできますが、データベースには結合がないため、コードで行う必要があります。トピックを読み込んでからコメントを読み込むことは、パフォーマンスの観点からは問題ないかもしれません。
その他のヒント:
MongoDBを使用すると、ドキュメントのINTO配列にインデックスを付けることができます。したがって、インデックスをドキュメントの単純なフィールド(SQLなど)の単なるインデックスとは考えないでください。たとえば、トピックのタグコレクションを使用して、タグにインデックスを付けることができます。 (http://www.mongodb.org/display/DOCS/Indexesを参照してください#Indexes-配列 )
データを取得または書き込む場合、任意のドキュメントの部分的な読み取りと部分的な書き込みを行うことができます。 (http://www.mongodb.org/displayを参照してください。 / DOCS / Retrieveing + a + Subscription + of + Fields )
そして最後に、コレクションとインデックスを使用して必要なものを取得する方法がわからない場合は、mapreduceを使用してそれを達成できる可能性があります。たとえば、現在使用されているすべてのタグを使用頻度で並べ替えて検索するには、使用されているタグを発行する各トピックをマップし、そのセットを減らして目的の結果を取得します。次に、そのマップリデュースの結果を永続的に保存し、必要な場合にのみ更新することができます。
これはリレーショナル思考からのかなり重要なマインドシフトですが、NOSQLアプローチがもたらすスケーラビリティと柔軟性が必要な場合は価値があります。