В чем преимущество PostgreSQL перед MongoDB
Что проверяют
Умеете ли вы выбирать хранилище под задачу, а не по моде. Интервьюер ждёт сравнения по делу и почти всегда задаёт обратный вопрос: а когда бы вы взяли MongoDB.
Как отвечать
Сильные стороны PostgreSQL:
- целостность на уровне базы: внешние ключи,
UNIQUE,CHECK,NOT NULL. Ошибку в коде сервиса база не пропустит, а в документной модели это остаётся на совести приложения; - связанные данные и сложные запросы:
JOINлюбых таблиц, оконные функции, CTE, развитый планировщик. Отчёт по заказам, клиентам и платежам пишется одним запросом; - транзакции: ACID и уровни изоляции вплоть до
SERIALIZABLEс многолетней историей в продакшене; - гибкость без отказа от SQL: тип
jsonbс GIN-индексами закрывает многие задачи, ради которых берут документную базу, расширения добавляют геоданные (PostGIS) и векторный поиск (pgvector), полнотекстовый поиск встроен; - экосистема Node.js: драйвер
pg, Prisma, Drizzle, TypeORM, Kysely, Knex.
Честно назовите и сильные стороны MongoDB: гибкая схема для разнородных документов, естественная модель, когда данные читаются целым агрегатом, встроенное шардирование и replica set с автоматическим переключением. В Node.js с ней работают через официальный драйвер mongodb или Mongoose. У PostgreSQL горизонтальное масштабирование записи требует Citus или шардирования в приложении, а автопереключение реплик делают через Patroni или облачный сервис.
Итог формулируйте условием: связанные сущности, деньги, отчётность и строгие инварианты ведут к PostgreSQL; огромный поток разнородных документов с простыми выборками по ключу и шардирование с первого дня ведут к MongoDB.
Где спотыкаются
Говорят, что в MongoDB нет транзакций. Многодокументные ACID-транзакции там есть с версии 4.0 для replica set и с 4.2 для шардированных кластеров, просто модель данных рассчитана обходиться без них.
Утверждают, что MongoDB не умеет объединять коллекции. В агрегации есть $lookup, хотя полноценные JOIN он не заменяет.
Отвечают «Postgres лучше» без привязки к задаче. Ответ без условий выглядит как личное предпочтение, а не как инженерное решение.