Soy bastante nuevo en nodejs/express y estoy practicando el desarrollo de pila completa con devchallenges.io, estoy haciendo el desafío de compras. Estoy tratando de actualizar la cantidad de un elemento al que me dirijo dentro de la matriz de elementos. Entiendo que mi intento a continuación fue terrible, realmente estoy luchando por entender la lógica para poder hacerlo.
// @route PUT api/list/item/quantity/:id // @desc Increase or decrease quantity // @access Private router.put('/item/quantity/:id', auth, async (req, res) => { const { action } = req.body; try { let list = await List.findOne({ user: req.user.id }); const item = list.items.find( (item) => item._id.toString() === req.params.id ); list = list.updateOne( { 'items._id': req.params.id }, { $set: { 'items.quantity': item.quantity + 1 } } ); await list.save(); return res.json(list); } catch (error) { console.error(error.message); res.status(500).send('Server Error'); } }); const mongoose = require('mongoose'); const Schema = mongoose.Schema; const ListSchema = new Schema({ user: { type: Schema.Types.ObjectId, }, name: { type: String, default: 'Shopping List', }, items: [ { name: { type: String, default: '', }, note: { type: String, default: '', }, image: { type: String, default: '', }, category: { type: String, default: '', }, quantity: { type: Number, default: 1, }, }, ], date: { type: Date, default: Date.now, }, }); module.exports = List = mongoose.model('list', ListSchema);Mire, esta es mi ruta de proveedor de actualización aquí, estoy actualizando el nombre de la calle y la ciudad anidados.
router.put("/update-vendors", async (req, res, next) => { const vendor = await Vendor.updateOne( { "address.street": "Street2", }, { $set: { "address.$.street": req.body.street, "address.$.city": req.body.city, }, } ); res.status(200).json(vendor); }); Puede actualizar cosas particulares con la ayuda de $set y otro método $push