Las bases de datos como MongoDB son excelentes cuando generalmente sabe dónde están sus datos (en lugar de tener que escribir varias consultas complicadas). Con Mongo, los datos "relacionados" se anidan en los datos primarios o tienen claves primarias / externas. Esto es genial si, por ejemplo, tiene publicaciones y comentarios; en general, no va a mostrar comentarios fuera del contexto de una publicación, por lo que tiene sentido que los comentarios estén contenidos dentro de una publicación (de esa manera obtendrá todos los comentarios para la publicación sin necesidad de consultar una tabla separada).
MongoDB no tiene esquemas. Esto significa que tomará cualquier estructura de datos que le arrojes, en su mayor parte.
Por otro lado, si necesita usar funciones agregadas y siente la necesidad de consultar datos de formas complejas que no se pueden lograr mediante incrustaciones o relaciones simples en Mongo, es cuando sabe que es hora de usar un RDBMS como MySQL o PostgreSQL.
MongoDB no está destinado a reemplazar SQL. Simplemente satisface diferentes necesidades, y MongoDB y un RDBMS se pueden usar en conjunto. En mi opinión, MongoDB no es tan necesario si no necesita que sus datos sean flexibles o incrustados en un documento principal. El desarrollo con MongoDB es muy divertido porque hay muchos menos pasos involucrados para poner en marcha un proyecto (digamos en Rails). Necesitas hacer un cambio? No hay problema. Simplemente agregue un atributo a su modelo. Hecho.
No puedo hablar por muchas otras bases de datos NoSQL, aunque sé que generalmente están diseñadas de manera similar para satisfacer una necesidad específica que un RDBMS no puede satisfacer. Algunos residen completamente en la memoria o pueden ser fragmentados o escalados muy fácilmente. Estoy bastante seguro de que Cassandra está diseñada para continuar operando sin pérdida de datos si un nodo se cae. Redis es básicamente un almacén de valores clave que reside en la memoria (con escrituras periódicas de disco para persistencia), pero también tiene la capacidad de almacenar tipos de datos como conjuntos y ordenarlos.