我有一个文档从猫鼬发现,我想在JSON编码和发送作为响应之前扩展。如果我尝试向文档添加属性,它会被忽略。属性不会出现在Object.getOwnPropertyNames(doc)中,因此不可能进行正常的扩展。奇怪的是,JSON.parse(JSON.encode(doc))工作并返回一个具有所有正确属性的对象。还有更好的办法吗?
当前回答
为了从Mongoose文档中获取普通对象,我使用_doc属性,如下所示
mongooseDoc._doc //returns plain json object
我尝试了toObject,但它给了我函数,参数和所有其他我不需要的东西。
其他回答
猫鼬模型继承自文档,文档有toObject()方法。我相信您正在寻找的应该是doc.toObject()的结果。
http://mongoosejs.com/docs/api.html#document_Document-toObject
您还可以对对象进行字符串化,然后再次解析以生成正常的对象。 例如:-
const obj = JSON.parse(JSON.stringify(mongoObj))
我一直在我的文档上使用toObject方法,但没有成功。 我需要添加平坦地图属性为true,最终有一个POJO。
const data = document.data.toObject({ flattenMaps: true });
如果属性不在模型中,快速的方法是:
文档。Set (key,value, {strict: false});
另一种方法是告诉Mongoose,通过在查询链中使用lean(),您所需要的只是返回文档的纯JavaScript版本。这样Mongoose就跳过了创建完整模型实例的步骤,你可以直接得到一个你可以修改的文档:
MyModel.findOne().lean().exec(function(err, doc) {
doc.addedProperty = 'foobar';
res.json(doc);
});
推荐文章
- ReferenceError: description没有定义NodeJs
- 将一个二进制的NodeJS Buffer转换为JavaScript的ArrayBuffer
- AngularJS只适用于单页应用程序吗?
- 如何在vue-cli项目中更改端口号
- 同步和异步编程(在node.js中)的区别是什么?
- 如何编辑通过npm安装的节点模块?
- “node_modules”文件夹应该包含在git存储库中吗
- 使用package.json在全局和本地安装依赖项
- this.libOptions.parse不是一个函数
- 对嵌套文件夹运行npm install的最好方法是什么?
- 节点Multer异常字段
- 很好的初学者教程socket.io?
- CALL_AND_RETRY_LAST分配失败-进程内存不足
- 在Ubuntu上安装Node.js
- 使用express.js代理