我的文档数组看起来像这样 https://i.stack.imgur.com/UyXlm.png从后端检索后:
41:
$__: {strictMode: true, selected: {…}, shardval: null, saveError: null, validationError: {…}, …}
$init: true
$locals: {}
errors: {undefined: {…}, files: {…}}
isNew: false
_doc: {status: "Finished", isOnHold: false, requirements: Array(0), files: Array(0), reportFileIds: Array(1), …}
__proto__: Object
每个项目的实际文档位于 _doc 下。这是 mongoose.Find 查询的结果:
let query = Job.find({
_id: {
$in: data.jobs
}
});
let result = await query.exec();
现在,如果我在发送结果数组之前尝试获取该结果数组的项目,它看起来并不像前端实际建模的内容,这很奇怪。
有没有办法使用 mongoose.find 获取纯文档数组?我无法使用聚合查询,因为我不想手动投影每个可能的属性。
EDIT:
这不是大声喊叫的重复,扩展语法与它无关,你看到我在任何地方提到扩展语法了吗?这和mongoose驱动有关。
Edit2:我最终循环遍历数组并在每个项目上调用 .toObject :
let jobs = await query.exec();
let result = [];
for (let doc of jobs) {
result.push(doc.toObject());
}
return result;
Edit3:结束通话query.lean().exec()
这做了正确的事。我过去根据 stackoverflow 示例使用精简部分作为参数,该示例可能已经过时,并且它只会返回文档的 ID。但像上面那样调用它效果很好。