有没有办法在 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'}
);
假设我有一个集合,其中包含一个字段,该字段引用另一个集合中的文档,如下所示:
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'}
);