如何获取 json 对象数组而不是猫鼬文档

Posted

技术标签:

【中文标题】如何获取 json 对象数组而不是猫鼬文档【英文标题】:How to get array of json objects rather than mongoose documents 【发布时间】:2012-08-26 00:10:45 【问题描述】:

当我执行如下.find 操作时:

Collection.find(name: 'Erik', function (err, docs) 
   // do momething
);

'docs' 变量填充了一组功能齐全的猫鼬文档。但我需要得到一组纯 JSON 对象。

我知道我可以通过 forEach 循环遍历“docs”数组并使用 .toJSON() 方法获取对象。 mongoose 是否支持这个功能,我有兴趣吗?

【问题讨论】:

javascript 对象数组 【参考方案1】:

如果您使用的是 Mongoose 3.x,您可以使用 lean 查询选项来执行此操作:

Collection.find(name: 'Erik').lean().exec(function (err, docs) 
    // docs are plain javascript objects instead of model instances
);

【讨论】:

请注意,leantoJSON 不同,因为它从 Mongo 返回原始转储(意味着不包括 virtuals)。请参阅this 了解更多信息 哇,他们很难找到这个。谢谢!【参考方案2】:
.exec(function(err, docs)
    docs= docs.map(o => o.toObject());

这将包括 virtualsgetter

【讨论】:

【参考方案3】:

通过结果映射并将每个结果转换为 JS 对象:

const result = await model.find(some: 'query');
return result.map((r) => r.toObject());

【讨论】:

以上是关于如何获取 json 对象数组而不是猫鼬文档的主要内容,如果未能解决你的问题,请参考以下文章

猫鼬填充如何在同一对象而不是子文档中填充文档

从属于一个文档的对象数组中获取一个元素(猫鼬)

如何将json对象数组保存到猫鼬?

如何将json对象数组保存到猫鼬?

推入数组猫鼬时对象对象而不是字符串

如何从猫鼬的数组中找到对象