Záleží.
Záleží na tom, kolik každého z těchto typů objektů očekáváte. Dokážete je všechny vměstnat do jednoho dokumentu MongoDB pro dané téma? Pravděpodobně ne.
Záleží na vztazích – máte vztahy one-to-many nebo many-to-many? Pokud je to jedna k mnoha a počet souvisejících entit je malý, můžete se rozhodnout je vložit do IList v dokumentu. Pokud je to many-to-many, můžete se rozhodnout použít tradičnější vztah nebo se můžete rozhodnout vložit obě strany jako ILlisty.
Stále můžete modelovat vztahy v MongoDB pomocí samostatných kolekcí, ALE v databázi nejsou žádná spojení, takže to musíte udělat v kódu. Načtení tématu a následné načtení komentářů k němu může být z hlediska výkonu v pořádku.
Další tipy:
S MongoDB můžete indexovat INTO pole na dokumentech. Nepřemýšlejte tedy o indexu jako o pouhém indexu na jednoduchém poli v dokumentu (jako je SQL). Můžete použít, řekněme, kolekci značek v tématu a indexovat do značek. (Viz http://www.mongodb.org/display/DOCS/Indexes #Indexes-Arrays )
Když načítáte nebo zapisujete data, můžete provést částečné čtení a částečný zápis jakéhokoli dokumentu. (viz http://www.mongodb.org/display /DOCS/Retrieving+a+Podmnožina+of+polí )
A konečně, když nevidíte, jak pomocí kolekcí a indexů získat to, co chcete, můžete toho dosáhnout pomocí redukce map. Chcete-li například najít všechny aktuálně používané tagy seřazené podle jejich frekvence použití, zmapovali byste každé téma, které vysílá tagy v něm použité, a pak byste tuto sadu zmenšili, abyste získali požadovaný výsledek. Výsledek zmenšení mapy pak můžete uložit trvale a aktualizovat jej pouze v případě potřeby.
Je to poměrně významný posun od relačního myšlení, ale stojí to za to, pokud potřebujete škálovatelnost a flexibilitu, kterou přístup NOSQL přináší.