Такие базы данных, как MongoDB, хороши, когда вы обычно знаете, где находятся ваши данные (в отличие от необходимости писать несколько сложных запросов). В Mongo «связанные» данные либо вложены в родительские данные, либо имеют первичные / внешние ключи. Это замечательно, если, например, у вас есть сообщения и комментарии; как правило, вы не собираетесь отображать комментарии вне контекста поста, поэтому имеет смысл, чтобы комментарии содержались внутри поста (таким образом вы получаете все комментарии к посту без необходимости запрашивать отдельную таблицу).
MongoDB не имеет схемы. Это означает, что он по большей части будет принимать любую структуру данных, которую вы ему предоставите.
С другой стороны, если вам необходимо использовать агрегатные функции и вы чувствуете необходимость запрашивать данные сложными способами, которые не могут быть достигнуты с помощью встраивания или простых отношений в Mongo, тогда вы знаете, что пришло время использовать СУБД, такие как MySQL или PostgreSQL.
MongoDB не предназначен для замены SQL. Он просто удовлетворяет различные потребности, и MongoDB и RDBMS могут использоваться совместно. На мой взгляд, MongoDB не так уж и необходим, если вам не нужно, чтобы ваши данные были гибкими или встроенными в родительский документ. Разработка с MongoDB очень увлекательна, потому что для запуска и запуска проекта (скажем, в Rails) требуется гораздо меньше шагов. Нужно внести изменения? Нет проблем. Просто добавьте атрибут к вашей модели. Готово.
Я не могу говорить о многих других базах данных NoSQL, хотя я знаю, что они, как правило, аналогичным образом предназначены для удовлетворения конкретных потребностей, которые не могут быть удовлетворены СУБД. Некоторые из них полностью находятся в памяти или могут быть очень легко защищены. Я почти уверен, что Cassandra предназначена для продолжения работы без потери данных, если узел выходит из строя. Redis - это в основном хранилище значений ключей, которое хранится в памяти (с периодической записью на диск для сохранения), но также имеет возможность хранить типы данных, такие как наборы, и сортировать их.