Учитывая созданный документ из метода .save или любого другого метода, который возвращает документ, как мне преобразовать этот документ в простой объект javascript с примитивными типами JSON? Я пробовал .toJSON и .toObject но оба они все еще поддерживают тип данных mongoose ObjectId, когда вместо этого я хочу строку:

 const mongoose = require('mongoose'); mongoose.connect('mongodb://localhost:27017/test', { useNewUrlParser: true, useUnifiedTopology: true }); const Cat = mongoose.model('Cat', { name: String }); const kitty = new Cat({ name: 'aed' }); kitty.save() .then(data ={amp}gt; { console.log(data.toObject()._id instanceof mongoose.Types.ObjectId) console.log(data.toJSON()._id instanceof mongoose.Types.ObjectId) console.log(data.toObject({ virtuals: true, getters: true })._id instanceof mongoose.Type.ObjectId) console.log(data.toJSON({ virtuals: true, getters: true })._id instanceof mongoose.Types.ObjectId) return data }) .then(data ={amp}gt; data.remove()) .catch(console.error); 
 true true true true 

Я знаю, что могу использовать .lean() , но мне особенно нужен документ, а также его версия простого объекта

заранее спасибо

Сначала вы можете использовать toObject , затем JSON.stringify , а затем JSON.parse .

 router.post("/cat", (req, res) ={amp}gt; { const kitty = new Cat({ name: "Masha" }); kitty.save().then(data ={amp}gt; { const obj = data.toObject(); const str = JSON.stringify(obj); const json = JSON.parse(str); console.log(typeof json._id); res.send(data); }); }); 

Результатом console.log(typeof json._id) будет string .

Также, чтобы удалить ключ версии, мы можем применить versionKey false в определении схемы.

 const mongoose = require("mongoose"); const catSchema = new mongoose.Schema({ name: String }, { versionKey: false }); const Cat = mongoose.model("Cat", catSchema); module.exports = Cat; 

Вы можете распространять этот документ (см. Пример ниже). Но в этом случае вы потеряете свойства, которые расширены от родительского прототипа.

console.log ({…} данные);