Una mejor manera de abordar un problema como este es usar doc.toObject()
así
doc.toObject({ getters: true })
otras opciones incluyen:
getters:
aplicar todos los captadores (ruta y captadores virtuales)
virtuals:
aplicar captadores virtuales (puede anular la opción de captadores)
minimize:
eliminar objetos vacíos (el valor predeterminado es verdadero)
transform:
una función de transformación para aplicar al documento resultante antes de regresar
depopulate:
despoblar las rutas pobladas y reemplazarlas con sus referencias originales (el valor predeterminado es falso)
versionKey:
si se incluye la clave de versión (el valor predeterminado es verdadero)
así, por ejemplo, puedes decir
Model.findOne().exec((err, doc) => {
if (!err) {
doc.toObject({ getters: true })
console.log('doc _id:', doc._id)
}
})
y ahora funcionará
Para referencia, consulte: http://mongoosejs.com/docs/api.html#document_Document-toObject