我有一个文档从猫鼬发现,我想在JSON编码和发送作为响应之前扩展。如果我尝试向文档添加属性,它会被忽略。属性不会出现在Object.getOwnPropertyNames(doc)中,因此不可能进行正常的扩展。奇怪的是,JSON.parse(JSON.encode(doc))工作并返回一个具有所有正确属性的对象。还有更好的办法吗?


当前回答

您还可以对对象进行字符串化,然后再次解析以生成正常的对象。 例如:-

const obj = JSON.parse(JSON.stringify(mongoObj))

其他回答

lean选项告诉Mongoose跳过结果文档的水化。这使得查询更快,内存消耗更少,但结果文档是普通的旧JavaScript对象(pojo),而不是Mongoose文档。

const leanDoc = await MyModel.findOne().lean();

没有必要使用JSON.parse()方法

您还可以对对象进行字符串化,然后再次解析以生成正常的对象。 例如:-

const obj = JSON.parse(JSON.stringify(mongoObj))

我一直在我的文档上使用toObject方法,但没有成功。 我需要添加平坦地图属性为true,最终有一个POJO。

const data = document.data.toObject({ flattenMaps: true });

如果属性不在模型中,快速的方法是:

文档。Set (key,value, {strict: false});

猫鼬模型继承自文档,文档有toObject()方法。我相信您正在寻找的应该是doc.toObject()的结果。

http://mongoosejs.com/docs/api.html#document_Document-toObject