const form = await Form.findOne({ _id: res._id }).populate({ path: "activity.viewedBy", model: User, }); const a = await form.activity.map((a) => a.viewedBy); console.log(a.map((e) => e.email));"No se puede leer la propiedad 'correo electrónico' de undefined"
¿Por qué? a es una matriz, llena de objetos, como esta:
[ { id: 123, email: example@email.com }, { id: 456, email: nice@email.com } ]Editar, compartiendo toda la función asíncrona:
const viewForm = async (req, res) => { const form = await Form.findOne({ _id: res._id }).populate({ path: "activity.viewedBy", model: User, }); const a = await form.activity.map((a) => a.viewedBy); console.log(a.map((e) => e.email)); await Form.updateOne( { _id: res._id }, { $push: { activity: { viewedBy: res.user, date: new Date(), }, }, } ); return { statusCode: 200, body: JSON.stringify(`Form viewed.`), }; };Edit2:
Había un undefined en la matriz, entre los objetos, no me di cuenta de eso... Por eso estaba obteniendo el indefinido.
a probablemente tenga una estructura diferente de lo que piensas (prueba console.log(a) ), solo demostrando:
const data = [ { id: 123, email: "example@email.com" }, { id: 456, email: "nice@email.com" } ]; const result = data.map((a) => a.email); console.log(result);Además, dar nombres significativos a las variables puede ayudar a evitar errores.
await form.activity.map((a) => a.viewedBy); devolverá una matriz de valores viewedBy por. Entonces, la matriz a no contiene los objetos completos. En su lugar, contiene una matriz de elementos viewedBy por. Además, eche un vistazo a la funcionalidad de la función map() .