Estoy tratando de actualizar un objeto en un subconjunto y en lugar de reemplazar y actualizar los datos. agrega una nueva entrada.
controlador.js:
const updateSubCategory = asyncHandler(async (req, res) => { const { dataArray } = req.body const categories = await Category.find({}) if (categories) { await Category.updateOne({ "SubCats._id": req.params.id }, { "$set": { SubCats: { name: dataArray[0], image: dataArray[1] } } }, { "multi": true }) res.json({ message: 'sub-category updated' }) } else { res.status(404) throw new Error('Error') } })Creo que necesita esto, pero no estoy seguro, si no lo necesita, si puede proporcionar datos de muestra y el resultado esperado en json.
Puedes probar un ejemplo PlayMongo
Actualiza los campos dentro, no reemplaza todo el documento incrustado (su consulta hace eso).
const updateSubCategory = asyncHandler(async (req, res) => { const { dataArray } = req.body const categories = await Category.find({}) if (categories) { await Category.updateOne({ "SubCats._id": req.params.id }, { "$set": { "SubCats.name" : dataArray[0], "SubCats.image" : dataArray[1] } } }, { "multi": true }) res.json({ message: 'sub-category updated' }) } else { res.status(404) throw new Error('Error') } })