Creé una función de actualización usando Mongoose. Sin embargo, cada vez que actualizo los datos usando findOneAndUpdate. Actualiza solo los campos ingresados y hace que los demás ahora sean nulos o estén vacíos. Me gustaría que cuando el usuario esté actualizando y no actualice un archivo, permanezca como estaba antes en lugar de estar vacío ahora. esencialmente solo actualiza los campos ingresados.
aquí están mis rutas
router.post("/updateStock", (req, res) => { const filter = {prodId: req.body.prodID} const update = req.body Product.findOneAndUpdate(filter, update, {new: true}).then((product) => { console.log("success"); res.send(product); }).catch(err => { console.log("err", err); res.status(500).send(err); }) });aquí hay un ejemplo de req.body. Solo actualicé el título y la categoría en el frente, lo que significa que todo lo demás está en blanco. Cuando guarda en la base de datos, solo actualiza el título y la categoría y deja todo lo demás en blanco. Me gustaría que no inserte los espacios en blanco en la base de datos y deje los campos como están
{ prodId: 'iPhone 111001200', title: 'iPhone 11 Pro', manufacturer: '', catergory: 'Electronics', price: '', quantity: '' }Aquí está mi modelo
const mongoose = require("mongoose"); const Product = mongoose.model( "Product", new mongoose.Schema({ title: String, manufacturer: String, price: String, catergory: String, quantity: String, prodID: String, images: Array }) ); module.exports = Product;Algo como esto entonces:
const update = {}; for (const key of Object.keys(req.body)){ if (req.body[key] !== '') { update[key] = req.body[key]; } } test.findOneAndUpdate(filter, {$set: update}, {new: true}).then((product) => { console.log("success"); res.send(product); }).catch(err => { console.log("err", err); res.status(500).send(err); })} Debe usar $set solo para actualizar los campos que desea actualizar. En su caso, los campos que no son '' .