Добрый вечер! Помогите разобраться, как правильно сохранять модели через mongoose.
Пример:
Есть middleware авторизации пользователя из которого в request прокидывается mongoose userModel
Далее мы работаем с этой моделью, как с обычным объектом, в контроллере вызывается цепочка различных асинхронных сервисов и модель заполняется данными
В конце контроллера вызывается userModel.save()
Возвращаем ответ
Проблема:
userModel содержит счетчик count, кликов по кнопке. Пусть по умолчанию он будет 0.
С фронта прилетает несколько практически одновременных запросов, параллельно получаем из базы данные и создаем две userModel, у каждой счетчик 0.
Каждая делает инкремент userModel.count += 1 и сохраняет результат.
В результате получаем count === 1, из-за того, что в момент получения данных во втором запросе, первый еще не закончил работу и в базе все еще 0. Но пользователь совершил два действия и нужно, чтобы таких коллизий не было и счетчик был равен 2.
Я знаю про оператор $inc в монго, но поля могут быть не только в виде счетчиков.
Если вам это так важно - уверен, что стоит почитать про "транзакции в монго". Или, даже, перейти на SQL-базы данных, где они реализованы значительно комфортнее