Dipende.
Dipende da quanti di ciascuno di questi tipi di oggetti ti aspetti di avere. Puoi inserirli tutti in un unico documento MongoDB per un determinato utente? Probabilmente no.
Dipende dalle relazioni:l'account utente è una relazione uno-a-molti o molti-a-molti? Se è uno a molti e il numero di account è piccolo, potresti scegliere di inserirli in un elenco IL su un documento utente.
Puoi ancora modellare le relazioni in MongoDB con raccolte separate MA non ci sono join nel database, quindi devi farlo nel codice. Caricare un utente e quindi caricare i suoi account potrebbe andare bene dal punto di vista delle prestazioni.
È possibile indicizzare gli array INTO sui documenti. Non pensare a un indice solo come a un indice su un campo semplice su un documento (come SQL). Puoi usare, ad esempio, una raccolta di tag su un documento e indicizzarli nei tag. (Vedi http://www.mongodb.org/display/DOCS/Indexes #Indici-Array )
Quando recuperi o scrivi dati puoi eseguire una lettura parziale e una scrittura parziale di qualsiasi documento. (vedi http://www.mongodb.org/display /DOCS/Recupero+un+sottoinsieme+di+campi )
E, infine, quando non riesci a vedere come ottenere ciò che desideri utilizzando raccolte e indici, potresti essere in grado di ottenerlo utilizzando map reduce. Ad esempio, per trovare tutti i tag attualmente in uso ordinati in base alla loro frequenza di utilizzo devi mappare ogni documento che emette i tag utilizzati al suo interno, quindi ridurre impostato per ottenere il risultato desiderato. Potresti quindi memorizzare il risultato di tale riduzione della mappa in modo permanente e aggiornarlo solo quando necessario.
Un'altra preoccupazione:hai menzionato il calcolo dei totali per tag. Se desideri coerenza transazionale di qualità contabile, MongoDB potrebbe non essere la scelta giusta per te. "Eventual-consistency" è il nome del gioco per i datastore NoSQL e generalmente non sono adatti per le transazioni finanziarie. Ad esempio, non importa se un utente vede un post del blog con 3 commenti mentre un altro ne vede 4 perché ha colpito diverse copie di replica che non sono ancora sincronizzate, ma per un report finanziario, quel tipo di coerenza è importante:il tuo il rapporto potrebbe non sommarsi!