Как использовать mongoose findAndUpdateOne()

#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');
  }
});