Estoy construyendo un sitio web con una base de datos usando NodeJS, MongoDB, Express, Mongoose, etc.
Cogí (y ajusté) el siguiente código de alguna parte, así que aquí es donde estoy...
exports.addCategories = catchAsync(async (req, res, next) => { const categories = req.body; const length = categories.length; const eventID = categories[length - 1].eventId; categories.pop(); Event.findOne({ _id: eventID }, (err, event) => { if (err) return res.status(400).send(err); if (!event) return res.status(400).send(new Error("Could not find that event")); Category.create(categories, (err, category) => { if (err) return res.status(400).send(err); event.categories.push(category._id); event.save((err) => { if (err) return res.status(400).send(err); res.status(200).json(category); }); }); }); });Actualmente, la salida de depuración de mongoose muestra lo siguiente (lo que confirma que la MAYORÍA funciona, pero las ID simplemente no se extraen correctamente):
> Mongoose: events.updateOne({ _id: ObjectId("614bc221bc067e62e0790875")}, { '$push': { categories: { '$each': [ undefined ] } }, '$inc': { __v: 1 }}, { session: undefined })¡No importa! Me di cuenta de que "categoría" seguía siendo una matriz, en lugar de un elemento de la matriz de categorías como supuse.
Así que reemplacé esa sección con esta, y ahora... ¡funciona!
Category.create(categories, (err, categories) => { if (err) return res.status(400).send(err); categories.forEach((category) => { event.categories.push(category._id); }); event.save((err) => { if (err) return res.status(400).send(err); }); });