我有一个文档从猫鼬发现,我想在JSON编码和发送作为响应之前扩展。如果我尝试向文档添加属性,它会被忽略。属性不会出现在Object.getOwnPropertyNames(doc)中,因此不可能进行正常的扩展。奇怪的是,JSON.parse(JSON.encode(doc))工作并返回一个具有所有正确属性的对象。还有更好的办法吗?
当前回答
另一种方法是告诉Mongoose,通过在查询链中使用lean(),您所需要的只是返回文档的纯JavaScript版本。这样Mongoose就跳过了创建完整模型实例的步骤,你可以直接得到一个你可以修改的文档:
MyModel.findOne().lean().exec(function(err, doc) {
doc.addedProperty = 'foobar';
res.json(doc);
});
其他回答
另一种方法是告诉Mongoose,通过在查询链中使用lean(),您所需要的只是返回文档的纯JavaScript版本。这样Mongoose就跳过了创建完整模型实例的步骤,你可以直接得到一个你可以修改的文档:
MyModel.findOne().lean().exec(function(err, doc) {
doc.addedProperty = 'foobar';
res.json(doc);
});
猫鼬模型继承自文档,文档有toObject()方法。我相信您正在寻找的应该是doc.toObject()的结果。
http://mongoosejs.com/docs/api.html#document_Document-toObject
您还可以对对象进行字符串化,然后再次解析以生成正常的对象。 例如:-
const obj = JSON.parse(JSON.stringify(mongoObj))
lean选项告诉Mongoose跳过结果文档的水化。这使得查询更快,内存消耗更少,但结果文档是普通的旧JavaScript对象(pojo),而不是Mongoose文档。
const leanDoc = await MyModel.findOne().lean();
没有必要使用JSON.parse()方法
我一直在我的文档上使用toObject方法,但没有成功。 我需要添加平坦地图属性为true,最终有一个POJO。
const data = document.data.toObject({ flattenMaps: true });
推荐文章
- npm犯错!代码UNABLE_TO_GET_ISSUER_CERT_LOCALLY
- Access-Control-Allow-Origin不允许Origin < Origin >
- 如何获得所有已注册的快捷路线?
- 你可以为你的组织托管一个私有的存储库来使用npm吗?
- 如何定位父文件夹?
- Gulp命令未找到-安装Gulp后错误
- 在Node.js中写入文件时创建目录
- 如何将自定义脚本添加到包中。Json文件,运行javascript文件?
- 使用child_process。execSync但保持输出在控制台
- SyntaxError:在严格模式下使用const
- 在Node.js中递归复制文件夹
- 如何在node.js中设置默认时区?
- “react-scripts”不被视为内部或外部命令
- 如何正确地读取异步/等待文件?
- 错误:无法验证nodejs中的第一个证书