Лучший способ решения такой проблемы - использовать doc.toObject()
вот так
doc.toObject({ getters: true })
другие варианты включают в себя:
getters:
применить все методы получения (пути и виртуальные методы получения)
virtuals:
применять виртуальные геттеры (можно переопределить опцию геттеров)
minimize:
удалить пустые объекты (по умолчанию true)
transform:
функция преобразования, применяемая к полученному документу перед возвратом
depopulate:
удалить все заполненные пути, заменив их исходными ссылками (по умолчанию false)
versionKey:
включать ли ключ версии (по умолчанию true)
так, например, вы можете сказать,
Model.findOne().exec((err, doc) => {
if (!err) {
doc.toObject({ getters: true })
console.log('doc _id:', doc._id)
}
})
и теперь это будет работать.
Для справки см .: http://mongoosejs.com/docs/api.html#document_Document-toObject