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ého uživatele? Pravděpodobně ne.
Záleží na vztazích – je uživatel-účet vztahem jeden k mnoha nebo mnoho k mnoha? Pokud je to jeden k mnoha a počet účtů je malý, můžete se rozhodnout umístit je do IList v dokumentu uživatele.
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í uživatele a následné načtení jeho účtů může být z hlediska výkonu v pořádku.
V dokumentech můžete indexovat pole INTO. Nepřemýšlejte 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 na dokumentu 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é značky seřazené podle frekvence používání, mapujte každý dokument vydávající značky, které jsou v něm použity, a pak byste snížili které nastavíte, abyste dosáhli požadovaného výsledku. Výsledek zmenšení mapy pak můžete uložit trvale a aktualizovat jej pouze v případě potřeby.
Ještě jeden problém:Zmiňujete výpočet součtů podle značek. Pokud chcete konzistenci transakcí v účetní kvalitě, MongoDB pro vás nemusí být tou správnou volbou. "Eventual-consistency" je název hry pro datová úložiště NoSQL a obecně nejsou vhodná pro finanční transakce. Například nezáleží na tom, jestli jeden uživatel uvidí blogový příspěvek se 3 komentáři, zatímco jiný vidí 4, protože narazí na různé kopie replik, které ještě nejsou synchronizované, ale u finanční zprávy na tomto druhu konzistence záleží – vaše přehled se nemusí sčítat!