Answers:
猫鼬Model
继承自Document
s,后者有一个toObject()
方法。我相信您要寻找的应该是的结果doc.toObject()
。
http://mongoosejs.com/docs/api.html#document_Document-toObject
Model.find({})
在docs返回数组时返回数组,这是否可行?您可以docs.toObject吗?
var docArray = modelArray.map(function(model) { return model.toObject(); });
执行此操作的另一种方法是,通过使用以下命令告诉Mongoose,您所需要的只是返回文档的纯JavaScript版本 lean()
在查询链中,。这样,Mongoose跳过了创建完整模型实例的步骤,您直接获得一个doc
可以修改的对象:
MyModel.findOne().lean().exec(function(err, doc) {
doc.addedProperty = 'foobar';
res.json(doc);
});
lean
通常性能更高,因为您跳过了首先创建完整的Mongoose文档的开销。
如果属性不在模型中的快速方法:
document.set( key,value, { strict: false });
解决这样的问题的一个更好的办法是使用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
为了从猫鼬文档中获取普通对象,我使用_doc
了如下属性
mongooseDoc._doc //returns plain json object
我尝试过,toObject
但是它给了我不需要的功能,参数和所有其他东西。
_
不是理想的解决方案。使用精益可能会解决您的问题。
_doc
多次使用财产而没有遇到任何问题。并且using lean
方法为您提供了无法执行猫鼬模型操作的简单对象。
您还可以对对象进行字符串化,然后再次解析以生成普通对象。例如:
const obj = JSON.parse(JSON.stringify(mongoObj))