Para actualizar un documento suelo hacer como tal...
Model.findById(id) .then((doc) => { doc.fName = req.body.fName ? req.body.fName : doc.fName; doc.lName = req.body.lName ? req.body.lName : doc.lName return doc.save(); }) .then((result) => res.send(" Succesfully updated ! New data: " + result)) .catch((err) => res.send(err));..que verifica si el campo realmente existe en la solicitud del cuerpo, de lo contrario, solo pasa el valor anterior.
¿Hay alguna manera de simplemente proporcionar los campos en la solicitud y dejar que haga la verificación por sí mismo, de modo que si un campo no existe, no lo elimine? al igual que...
Model.someMethod(id) .then((doc) => { doc.fName = req.body.fName doc.lName = req.body.lName return doc.save(); }) .then((result) => res.send(" Succesfully updated ! New data: " + result)) .catch((err) => res.send(err));Usarlo de esta manera solo actualizará el mismo campo que ingresaste en el req.body . Los demás campos permanecerán como están. La variable que está en los campos NOT_ALLOWED no se actualizará.
const NOT_ALLOWED = ['_id'] //Just the same field will update which are not in this variable Model.findById(id).then((docs) => { Object.keys(req.body).map((key) => { if (NOT_ALLOWED.indexOf(key) === -1) { docs[key] = req.body[key] } }) return docs.save() }) .then((result) => console.log("Updated Data", result)) .catch((err) => res.send(err));Puede hacerlo con una consulta de actualización . Primero, puede construir la configuración de actualización en función de todas las propiedades de req.body . Luego, simplemente pase esa configuración de actualización a la consulta de actualización . También puede pasar { new: true } como tercera configuración para actualizar la consulta, por lo que se devolverá el documento actualizado.
let update = {}; if (req.body.fName) update.fName = req.body.fName; if (req.body.lName) update.lName = req.body.lName; Model.findByIdAndUpdate(id, update, { new: true }) .then((result) => res.send(" Succesfully updated ! New data: " + result)) .catch((err) => res.send(err));