Tengo que hacer un CRUD simple en la API de Node/Mongoose. También tengo que put y patch y mientras hago el parche, estoy un poco confundido, porque quería usar el método findByIdAndUpdate , pero como veo en los ejemplos, solo hay un registro actualizado, por ejemplo, {name: "newName"} . Me preguntaba qué debería hacer si, por ejemplo, quisiera actualizar dos celdas.
mi esquema:
const userSchema = new Schema({ login: String, email: String, registrationDate: Date, });Mi código de parche:
router.patch('/:id', async (req, res) => { const id = req.params.id; User.findByIdAndUpdate(id, { ??? }, function (err, docs) { if (err){ console.log(err) } else{ console.log("Updated User : ", docs); } }); }); No sé qué debo escribir en "???", porque ¿y si quisiera actualizar solo el inicio de sesión y si quisiera actualizar el nombre y el correo electrónico? ¿Quizás me equivoque y PATCH se use solo para editar UNA celda y en otros casos debería usar PUT ?
Editar:
Lo hice funcionar usando algo como esto:
router.patch('/:id', async (req, res) => { const id = req.params.id; let updates={} if (req.body.login) { updates["login"] = req.body.login } if (req.body.email) { updates["email"] = req.body.email } if (req.body.registrationDate) { updates["registrationDate"] = req.body.registrationDate } User.findByIdAndUpdate(id, updates, function (err, docs) { if (err){ console.log(err) } else{ console.log("Updated User : ", docs); } }); }); De todas formas tengo una duda que debo hacer para "detener" la acción. Estoy usando HTTPie y cuando escribo http PATCH......, parece que no puedo escribir nada más, porque todavía funciona, necesito hacer CTRL+C para detener la consulta.
Simplemente escriba los campos que desea cambiar y los nuevos valores separados por comas.
const id= req.params.id; const email = "newemail"; const date = "1991/13/01"; const user = await User.findByIdAndUpdate( { _id: id, }, { email, registrationDate: date}, { upsert: false } );