Estoy tratando de consultar y actualizar un elemento en la matriz de listas (roster.schedule.monday.start) y luego actualizar el valor en este ejemplo.
monday.start estas dos claves deben ser dinámicas
Creo que el enfoque sería algo como esto.
Buscar documento por _id
encontrar objeto coincidente en matriz por _id
actualizar valores anidados
He intentado esto a continuación sin suerte, ¿alguien podría ayudar en este problema?
muchas gracias
// Mongoose query exports.updateRoster = (req, res) => { const editDay = req.body.day; const value = req.body.valueOfEntry; const userId = req.body.id; const rosterId = req.body.rosterId; const startPerieod = req.body.time; let dynObj = { ["rosters.$.schedule.$." + editDay + ".$." + startPerieod]: value, }; Carer.updateOne({ "rosters._id": rosterId }, { $set: dynObj }).exec( (err, roster) => { if (err) { return res.status(400).json({ error: err, }); } res.json(roster); } ); }; // Schema const mongoose = require("mongoose"); const { ObjectId } = mongoose.Schema; const carersSchema = new mongoose.Schema({ rosters: [ { schedule: { monday: { start: { type: String }, finish: { type: String }, notes: { type: String }, }, ], }); module.exports = mongoose.model("Carers", carersSchema);Intente usar $ set y filtros de matriz como en el enlace
Carer.findOneAndUpdate({_id: carerId}, { "$set": {[`rosters.$[outer].schedule.${editDay}.${startPerieod}`]: value} }, { "arrayFilters": [{ "outer._id": roasterId }] }, function(err, response) { if(err) console.log(err) console.log(response) })