Лучший способ решения такой проблемы - использовать 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