Похоже, вы хотите обновить конкретные поля результата, а не весь объект. То есть если пользователь только предоставляет параметры обновления для имени, вы хотите только обновить имя в базе данных. Используя свое имя: например, «Альбертс», то newUserInfo будет
newUserInfo: {
name: 'bruce albert',
surname: '',
job: '',
email: ''
}
и вы не хотите, чтобы просто upsert с этими значениями, потому что вы либо стереть информацию, которую вы уже имеете, или добавить дубликат запись с меньшей информацией.
В этом случае вы можете только оптимизировать пока.
- запроса в базу данных, если пользователь существует
- , если он существует получить значение базы данных
- сравнить значения базы данных со значениями формы, посланных от пользователя
- , если значения из базы данных являются равными, отказаться от операции
- , если значения из базы данных различны, обновить значения с формой значения
- близко дб и отправить ответ
Шаги 1 и 2 могут быть объединены, так как findOne() (или что-то в этом роде) вернет параметры соответствия записи, но только если объект существует. Если он не существует, вы можете вставить значения, переданные пользователем.
Шаг 4 можно удалить, потому что по существу он ничего не делает.
Шаг 5, вероятно, самый важный, поскольку вам нужно определить, как значения могут быть «разными». Подумайте, хотите ли вы обновить job = ''? Потому что это «отличается» от «batman», хотя вы можете не захотеть обновлять это значение.
Мои шаги будут
- Смотрите, если запись существует в базе данных.
- Если это не ВСТАВИТЬ объект и перейдите к шагу 3
- Если это произойдет, перейдите к шагу 2
- Сравните значения в объекте базы данных со значениями, поставляемых пользователем.
- Если значения различны (в том виде, в котором вы хотите), обновите каждое поле по мере необходимости.
- Если значения совпадают, то нет ничего, чтобы сделать, перейдите к шагу 3
- Закрыть дб и отправить ответ пользователю
Надеется, что это помогает.
Если новые значения совпадают с старыми значениями, что может быть вредным для их замены? Пожалуйста, обновите свой вопрос, чтобы включить некоторую информацию о _why_, которую вы пытаетесь сделать, что может помочь другим ответить на ваш вопрос. –
Я согласен с Мартином, что вы набираете с помощью этих шести шагов? Если два человека отредактируют запись одновременно, они все равно будут перезаписывать изменения друг друга. – robertc
, если новые значения совпадают с старыми значениями, нет проблем с их заменой, поскольку они аналогичны старым, но возможно ли изменить только разные значения? и другая проблема заключается в том, когда пользователь сначала вводит значения ... i ahve, чтобы сначала проверить, если они существуют .. – andrescabana86