I database come MongoDB sono grandi quando di solito sai dove sono i tuoi dati (al contrario di dover scrivere parecchie query complicate). Con Mongo, i dati "correlati" sono nidificati nei dati principali o ha chiavi primarie / esterne. Questo è grandioso se, ad esempio, hai Post e Commenti; in generale, non verranno visualizzati commenti al di fuori del contesto di un post, quindi è logico che i commenti siano contenuti in un post (in questo modo si ottengono tutti i commenti per il post senza la necessità di eseguire una query in una tabella separata).
MongoDB è senza schemi. Ciò significa che prenderà la struttura dei dati che ci passi sopra, per la maggior parte.
D'altra parte, se hai bisogno di utilizzare funzioni aggregate e senti la necessità di interrogare i dati in modi complessi che non possono essere raggiunti tramite incorporamenti o semplici relazioni in Mongo, è quando sai che è ora di usare un RDBMS come MySQL o PostgreSQL.
MongoDB non è destinato a sostituire SQL. Semplicemente soddisfa diversi bisogni e MongoDB e un RDBMS possono essere usati insieme. Secondo me, MongoDB non è tutto ciò che è necessario se non hai bisogno che i tuoi dati siano flessibili o incorporati in un documento principale. Lo sviluppo con MongoDB è molto divertente perché ci sono molti meno passi necessari per ottenere un progetto (diciamo in Rails) attivo e funzionante. Hai bisogno di cambiare? Nessun problema. Basta aggiungere un attributo al tuo modello. Fatto.
Non posso parlare per molti altri database NoSQL, anche se so che di solito sono progettati in modo simile per soddisfare un bisogno specifico che non può essere soddisfatto da un RDBMS. Alcuni risiedono interamente nella memoria o sono in grado di essere ridimensionati o ridimensionati molto facilmente. Sono abbastanza sicuro che Cassandra è progettato per continuare a funzionare senza perdita di dati se un nodo si interrompe. Redis è fondamentalmente un archivio di valori chiave che risiede in memoria (con scritture periodiche del disco per la persistenza), ma ha anche la capacità di memorizzare tipi di dati come set e ordinarli.