小编Ask*_*ons的帖子

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

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

ClassEnrollment

_id | student | class
---------------------
Run Code Online (Sandbox Code Playgroud)

和类集合中的类具有以下模式:

_id | className | teacher | building | time | days | classNumber | description
------------------------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)

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

在我的情况下,我不希望大多数类字段,只是名称.如果我从db获取所有字段的3000个类的列表,我最终会以网络延迟的形式出现性能损失(这些3000个类必须从托管数据库传输到服务器,这可能是50 MB原始数据如果描述很长)

有没有办法通过填充选项填充类名称列表,只是通过填充选项(在幕后我想它会像投影一样工作,所以db只响应类名和_id而不是所有类信息)?

mongoose mongodb node.js

10
推荐指数
1
解决办法
3396
查看次数

使用Mongoose在Koa中使用流式查询编写流式响应

我正在尝试从Mongo数据库向Koa应用程序的用户发送大型结果集(使用Mongoose).

我原来有类似的东西:

var res = yield Model.find().limit(500).exec();
this.body = {data: res};
Run Code Online (Sandbox Code Playgroud)

但是,发送的结果集的大小导致应用程序超时,因此我希望将响应流式传输来自数据库.

使用Mongoose,您可以通过执行以下操作将查询结果转换为流:

var stream = Model.find().limit(300).stream();
Run Code Online (Sandbox Code Playgroud)

但是,我不确定如何在保留所需格式的同时将此流写入响应.我想要这样的事情发生:

this.body.write("{data: "});
this.body.write(stream);
this.body.write("}");
Run Code Online (Sandbox Code Playgroud)

但是我知道Koa中没有body.write,我确信我也没有正确使用流.有人能指出我正确的方向吗?

streaming mongoose mongodb node.js koa

7
推荐指数
1
解决办法
3680
查看次数

标签 统计

mongodb ×2

mongoose ×2

node.js ×2

koa ×1

streaming ×1