mi req.body es este, proviene de mi interfaz, por lo que son un par de objetos en una matriz, me gustaría actualizar en función de los registros que coinciden, pero la página ha cambiado.
[ [0] { [0] _id: '60393a58c772c12724aa636e', [0] title: 'newTitle2', [0] page: '8', [0] book: '010', [0] __v: 0 [0] }, [0] { [0] _id: '60394e08f6e0ad0bb077e0bc', [0] title: 'newTitle3', [0] page: '123', [0] book: '099', [0] __v: 0 [0] } [0] ]mi ruta es esta
router.post("/dataSend", async(req, res) => { let { title, page, book} = req.body; console.log(req.body) const filter = { title }; const update = { page}; let doc = await Data.findOneAndUpdate({title:req.body[0].title},{page: req.body[0].page}); res.send(doc) })Entonces, esto funcionará si especifico con mongoose que quiero actualizar la primera matriz [0], pero me gustaría actualizar todo, no estoy seguro si .map o forEach o un bucle es el camino a seguir.
Algunas ideas
En lugar de llamar a findOneAndUpdate en un bucle, creo que bulkWrite (docs) sería la mejor opción en este caso, por lo que no envía sus actualizaciones a Mongo una por una. Puede mapear sus operaciones de actualización y enviarlas en un lote. Consulte el siguiente fragmento para ver un ejemplo:
router.post("/dataSend", async(req, res) => { const records = req.body const updateOps = records.map(record => { const updateOp = { 'updateOne': { 'filter': { 'title': record.title, }, 'update': { 'page': record.page }, } } return updateOp }) const result = await Data.bulkWrite(updateOps) res.send(result) })