To zależy.
Zależy to od tego, ile każdego z tych typów obiektów spodziewasz się mieć. Czy potrafisz zmieścić je wszystkie w jednym dokumencie MongoDB dla danego tematu? Prawdopodobnie nie.
To zależy od relacji – czy masz relacje jeden-do-wielu czy wiele-do-wielu? Jeśli jest to jeden do wielu, a liczba powiązanych jednostek jest niewielka, możesz umieścić je w IList w dokumencie. Jeśli jest wiele do wielu, możesz wybrać bardziej tradycyjną relację lub osadzić obie strony jako IListy.
Nadal możesz modelować relacje w MongoDB z oddzielnymi kolekcjami, ALE w bazie danych nie ma sprzężeń, więc musisz to zrobić w kodzie. Załadowanie tematu, a następnie załadowanie komentarzy może być w porządku z perspektywy wydajności.
Inne wskazówki:
Dzięki MongoDB możesz indeksować tablice INTO na dokumentach. Nie myśl więc o indeksie jako o indeksie prostego pola w dokumencie (takim jak SQL). Możesz użyć, powiedzmy, kolekcji tagów w temacie i zaindeksować do tagów. (Patrz http://www.mongodb.org/display/DOCS/Indexes #Indexes-Arrays )
Kiedy pobierasz lub zapisujesz dane, możesz wykonać częściowy odczyt i częściowy zapis dowolnego dokumentu. (patrz http://www.mongodb.org/display /DOCS/Pobieranie+a+podzbioru+pól )
I wreszcie, gdy nie możesz zobaczyć, jak uzyskać to, co chcesz, korzystając z kolekcji i indeksów, możesz to osiągnąć za pomocą funkcji map Reduce. Na przykład, aby znaleźć wszystkie aktualnie używane znaczniki posortowane według częstotliwości ich używania, należy zmapować każdy temat emitujący użyte w nim znaczniki, a następnie zredukować ten zestaw, aby uzyskać pożądany wynik. Możesz wtedy zapisać wynik tej mapy na stałe i aktualizować ją tylko wtedy, gdy zajdzie taka potrzeba.
Jest to dość znacząca zmiana myślenia w stosunku do myślenia relacyjnego, ale jest tego warta, jeśli potrzebujesz skalowalności i elastyczności, jaką zapewnia podejście NOSQL.