Las bases de datos como MongoDB son excelentes cuando generalmente se 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 principales o tienen claves primarias / externas. Esto es genial si, por ejemplo, tienes 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 obtiene todos los comentarios de la publicación sin necesidad de consultar una tabla separada).
MongoDB es esquemático. Esto significa que tomará la estructura de datos que le envíe, en su mayor parte.
Por otra parte, si necesita utilizar funciones agregadas y siente la necesidad de consultar datos de formas complejas que no se pueden lograr a través de 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 a 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 estén incrustados en un documento principal. El desarrollo con MongoDB es muy divertido porque hay muchos menos pasos para poner en marcha un proyecto (por ejemplo, en Rails). Necesitas hacer un cambio? No hay problema. Solo agrega un atributo a tu 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 se pueden fragmentar o escalar 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 grabaciones periódicas de disco para persistencia), pero también tiene la capacidad de almacenar tipos de datos como conjuntos y ordenarlos.