Uma maneira melhor de resolver um problema como esse é usando doc.toObject()
esse
doc.toObject({ getters: true })
outras opções incluem:
getters:
aplicar todos os getters (caminho e getters virtuais)
virtuals:
aplicar getters virtuais (pode substituir a opção getters)
minimize:
remover objetos vazios (o padrão é true)
transform:
uma função de transformação a ser aplicada ao documento resultante antes de retornar
depopulate:
despovoar todos os caminhos preenchidos, substituindo-os por suas referências originais (o padrão é false)
versionKey:
se deve incluir a chave da versão (o padrão é true)
então, por exemplo, você pode dizer
Model.findOne().exec((err, doc) => {
if (!err) {
doc.toObject({ getters: true })
console.log('doc _id:', doc._id)
}
})
e agora vai funcionar.
Para referência, consulte: http://mongoosejs.com/docs/api.html#document_Document-toObject