WhatIsHTML
@WhatIsHTML
HTML программист

Как оптимальнее обновить уникальные поля в MongoDb?

Привет всем.
Задача. Пользователь может менять свои данные: имя, возраст, мейл, номер телефона. При этом мейл и телефон - уникальные поля. Если пользователь пытается заменить мейл или номер на уже существующий, то ему необходимо вывести адекватное сообщение об этом. Если мейл занят кем-то, сообщение будет - "мейл занят", если номер - "номер занят".
Проблема. При попытке заменить мейл на уже существующий, запись в бд не обновляется и это хорошо, но бекенд вылетает, останавливается, а мне нужно вывести сообщение пользователю ну и чтобы бекенд дальше работал.
Возможное решение.Самое первое, что приходит в голову. Последовательные шаги
1. Проверить, изменились ли мейл и телефон на фронтенде. Если нет, то можем спокойно обновлять данные в бд.
2. Если мейл и/или телефон изменились, то перед тем, как сохранить их, нужно проверить сперва существует ли уже пользователь с таким мейлом в базе. Если нет, то ок, но затем нужно делать еще один запрос, чтобы проверить существует ли такой пользователь с номером телефона.
Получается еще два доп. запроса. И их количество увеличивается с количеством изменяемых уникальных полей. Как-то не оптимально или нормально?
Вопрос Есть более оптимальное решение?
  • Вопрос задан
  • 287 просмотров
Решения вопроса 1
yarkov
@yarkov
Помог ответ? Отметь решением.
Псевдокод:
User.findOneAndUpdate({_id: "1s3d21f2s1d3f2s1d32f1"}, {
        email: "john@doe.com",
        number: "123456789"
    }, (err, user) => {
    if(err) { // проверяйте что за ошибка и если ошибка уникального поля, то уведомляйте юзера
        return res.status(400).json({error: err});
    }
});
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы