#node.js #mongodb #mongoose #mern
#node.js #mongodb #mongoose #мерн
Вопрос:
я пытаюсь обновить MongoDB через mongoose, используя метод findOneAndUpdate (), я разрушаю свои поля из req.body, но если я обновил только одно значение, для других установлено значение null, как мне это исправить
код
const { name, email, phone, type } = req.body;
await Contact.findOneAndUpdate(
{ _id: req.params.id },
{ $set: { name, email, type, phone } },
{ upsert: true },
(err, updatedContact) => {
if (err) {
console.error(err.message);
res.status(400).send('Could not updat');
} else {
res.json(updatedContact);
}
}
);
});
******************************************
Комментарии:
1. можете ли вы уточнить, о чем вы спрашиваете?
2. как использовать findOneAndUpdate без установки значений, которые вы не хотели обновлять до null
3. уже нашел решение, спасибо, ценю твои усилия
Ответ №1:
Это дает мне желаемый результат, которого я ожидал, пожалуйста, не то, что я не реализовал проверку ошибок, вы можете сделать это с помощью «экспресс-валидатора»
const errors = validationResult(req);
if (!errors.isEmpty()) {
return res.status(400).json({ errors: errors.array() });
}
const { name, email, phone, type } = req.body;
// Build contact object
const updatedContact = {};
if (name) updatedContact.name = name;
if (email) updatedContact.email = email;
if (phone) updatedContact.phone = phone;
if (type) updatedContact.type = type;
try {
await Contact.findOneAndUpdate(
{ _id: req.params.id },
{ $set: updatedContact },
{ new: true }
);
res.json(updatedContact);
} catch (err) {
console.error(err.message);
res.status(400).send('Could not update');
}
});