Bancos de dados como o MongoDB são ótimos quando você geralmente sabe onde seus dados estão (em oposição à necessidade de escrever várias consultas complicadas). Com o Mongo, os dados "relacionados" são aninhados nos dados pai ou possuem chaves primárias / estrangeiras. Isso é ótimo se, por exemplo, você tem Posts e Comentários; geralmente, você não exibirá comentários fora do contexto de uma postagem, portanto, faz sentido que os comentários estejam contidos em uma postagem (assim, você obtém todos os comentários para a postagem sem precisar consultar uma tabela separada).
O MongoDB não tem esquema. Isso significa que, na maior parte, será necessária a estrutura dos dados que você usar.
Por outro lado, se você precisar usar funções agregadas e sentir a necessidade de consultar dados de maneiras complexas que não podem ser obtidas por meio de incorporações ou relações simples no Mongo, saberá que é hora de usar um RDBMS como o MySQL ou PostgreSQL.
O MongoDB não é destinado a substituir o SQL. Ela simplesmente preenche necessidades diferentes, e o MongoDB e um RDBMS podem ser usados em conjunto. Na minha opinião, o MongoDB não é tão necessário se você não precisa que seus dados sejam flexíveis ou incorporados em um documento pai. O desenvolvimento com o MongoDB é muito divertido porque há muito menos etapas envolvidas na execução de um projeto (digamos, no Rails). Precisa fazer uma mudança? Sem problemas. Basta adicionar um atributo ao seu modelo. Feito.
Eu não posso falar por muitos outros bancos de dados NoSQL, embora eu saiba que eles geralmente são projetados de forma semelhante para atender a uma necessidade específica que não pode ser atendida por um RDBMS. Algumas residem inteiramente na memória ou podem ser compartilhadas ou dimensionadas com muita facilidade. Tenho certeza de que o Cassandra foi projetado para continuar operando sem perda de dados se um nó ficar inativo. Redis é basicamente um armazenamento de valores chave que reside na memória (com gravações de disco periódicas para persistência), mas também tem a capacidade de armazenar tipos de dados como conjuntos e classificá-los.