Это зависит.
Это зависит от того, сколько из каждого из этих типов объектов вы ожидаете иметь. Можете ли вы вписать их все в один документ MongoDB для данной темы? Вероятно, нет.
Это зависит от отношений - у вас есть отношения один ко многим или многие ко многим? Если это один-ко-многим, а количество связанных сущностей невелико, вы можете включить их в документ IList. Если их много ко многим, вы можете использовать более традиционные отношения, или вы можете включить обе стороны в качестве ILists.
Вы все еще можете моделировать отношения в MongoDB с отдельными коллекциями, НО в базе данных нет соединений, поэтому вы должны сделать это в коде. Загрузка темы и последующая загрузка комментариев к ней могут быть просто нормальными с точки зрения производительности.
Другие советы:
С MongoDB вы можете индексировать массивы INTO в документах. Поэтому не думайте, что индекс - это просто индекс простого поля в документе (например, SQL). Вы можете использовать, скажем, коллекцию тегов в теме и индексировать теги. (См. http://www.mongodb.org/display/DOCS/Indexes#Indexes-Arrays)
При получении или записи данных вы можете выполнять частичное чтение и частичную запись любого документа. (см. http://www.mongodb.org/display/DOCS/Retrieving+a+Subset+of+Fields)
И, наконец, когда вы не видите, как получить то, что вы хотите, с помощью коллекций и индексов, вы можете достичь этого, используя уменьшение карты. Например, чтобы найти все используемые в настоящее время теги, отсортированные по частоте их использования, необходимо сопоставить каждую тему, в которой используются теги, а затем уменьшить этот набор, чтобы получить желаемый результат. Затем вы можете сохранить результат этой карты постоянно и обновлять его только тогда, когда вам нужно.
Это довольно существенное изменение мышления от реляционного мышления, но оно того стоит, если вам нужна масштабируемость и гибкость, которые дает подход NOSQL.