给定从.save
方法或任何其他返回文档的方法创建的文档,如何将该文档转换为具有原始JSON类型的纯javascript对象?我已经尝试了.toJSON
和.toObject
但是当我想要一个字符串时,它们仍然保持猫鼬的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 => {
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 => data.remove())
.catch(console.error);
true
true
true
true
我知道我可以使用.lean()
,但我特别需要文档及其普通对象版本
提前致谢
toObject
,然后使用JSON.stringify
,然后使用JSON.parse
。
router.post("/cat", (req, res) => {
const kitty = new Cat({ name: "Masha" });
kitty.save().then(data => {
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
.
同样要删除版本键,我们可以在架构定义中应用 false 选项versionKey
。
const mongoose = require("mongoose");
const catSchema = new mongoose.Schema({ name: String }, { versionKey: false });
const Cat = mongoose.model("Cat", catSchema);
module.exports = Cat;
您可以传播该文档(请参阅下面的示例(。但在这种情况下,您将失去从父原型扩展的属性。
console.log({...数据}(;