Зависи.
Зависи колко от всеки от тези видове обекти очаквате да имате. Можете ли да ги съберете всички в един MongoDB документ за дадена тема? Вероятно не.
Зависи от връзките - имате ли връзки "един към много" или "много към много"? Ако е едно към много и броят на свързаните обекти е малък, можете да изберете да ги вградите в IList на документ. Ако е много към много, можете да изберете да използвате по-традиционна връзка или да изберете да вградите и двете страни като ILists.
Все още можете да моделирате връзки в MongoDB с отделни колекции, НО в базата данни няма съединения, така че трябва да направите това в код. Зареждането на тема и след това зареждането на коментарите за нея може да е добре от гледна точка на ефективността.
Други съвети:
С MongoDB можете да индексирате INTO масиви на документи. Така че не мислете за индекс просто като за индекс на просто поле в документ (като SQL). Можете да използвате, да речем, колекция от етикети в тема и да индексирате в етикетите. (Вижте http://www.mongodb.org/display/DOCS/Indexes #Индекси-Масиви )
Когато извличате или записвате данни, можете да извършите частично четене и частично записване на всеки документ. (вижте http://www.mongodb.org/display /DOCS/Извличане+на+подмножество+от+полета )
И накрая, когато не можете да видите как да получите това, което искате с помощта на колекции и индекси, може да успеете да го постигнете с помощта на намаляване на картата. Например, за да намерите всички тагове, които се използват в момента, сортирани по тяхната честота на използване, трябва да картографирате всяка тема, излъчваща етикетите, използвани в нея, и след това ще намалите този набор, за да получите желания резултат. След това можете да съхраните резултата от това намаляване на картата за постоянно и да го актуализирате само когато е необходимо.
Това е доста значителна промяна на ума от релационното мислене, но си заслужава, ако имате нужда от мащабируемостта и гъвкавостта, които носи подходът NOSQL.