Dado que tengo un objeto JS que obtiene su valor de una base de datos mongodb a través de mongoose usando esta función
const followed = await User.find( { _id: followie }, { _id:0,"present": { $in: [followerid, "$followers"], } } );Cuando consola.log (seguido), obtengo el siguiente resultado
console.log(followed[0]); /*output : [nodemon] restarting due to changes... [nodemon] starting `node index.js` listening on port 8800 at time: 1655365344312 Mongodb Connected { present: true } ----------> console.log output */pero cuando trato de acceder al objeto "presente" dentro del diccionario seguido, obtengo el tipo indefinido que es:
console.log(followed[0][0]); /*output : [nodemon] restarting due to changes... [nodemon] starting `node index.js` listening on port 8800 at time: 1655365532137 Mongodb Connected undefined --------> this is the console.log() */Al usar typeof(followed[0]) obtengo el tipo como un objeto pero cuando trato de obtener el typeof[0][0] me da el tipo como indefinido. ¿Dónde me estoy equivocando? También probé seguido[0].presente y seguido[0][presente] con los mismos resultados
El problema con mi enfoque y el manejo directo de la clave .present en el diccionario fue que los datos de la mangosta que se enviaban no estaban en formato JSON. La función find() devolvió una instancia de la clase Mongoose Document. Los datos se devolvían en la clave ._doc en la matriz dentro del objeto seguido.
La solución a esto fue usar .lean() con el objeto de búsqueda.
const followed = await User.find( { _id: followie }, { _id: 0, present: { $in: [followerid, "$followers"], }, } ).lean();Esto da como resultado que se devuelva un objeto json al que puedo acceder con object.key normal o, en este caso, con el código seguido[0].present o seguido[0][0].
Se pueden encontrar más detalles aquí: https://mongoosejs.com/docs/populate.html