有没有办法在 Mongoose 中填充投影?

Is there a way to populate with a projection in Mongoose?

假设我有一个集合,其中包含一个字段,该字段引用另一个集合中的文档,如下所示:

ClassEnrollment

_id | student | class
---------------------
Class 集合中的

和 class 具有以下架构:

_id | className | teacher | building | time | days | classNumber | description
------------------------------------------------------------------------------

如果我有一组 3000 个 classes 我想在服务器上填充我可能会做类似 ClassEnrollment.populate(listOfClassEnrollments, {path: 'class'});

在我的情况下,我 不想要 大多数 class 字段,只是名称。如果我从数据库中获得包含所有字段的 3000 classes 的列表,我最终会以网络延迟的形式影响性能(这 3000 classes 必须从托管数据库传输到服务器,如果描述很长,这可能是 50 MB 的原始数据)

有没有一种方法可以通过填充选项仅用名称填充 class 注册列表(在幕后,我想它会像投影一样工作,所以数据库只响应 class name 和 _id 而不是所有 class 信息)?

您可以在 populate 调用中使用 select 选项来执行此操作:

ClassEnrollment.populate(listOfClassEnrollments, {path: 'class', select: 'className'});

要指定多个字段,请使用 space 分隔的列表:

ClassEnrollment.populate(
    listOfClassEnrollments,
    {path: 'class', select: 'className classNumber'}
);