Javascript Mongoose.js:什么是QueryStreams
我查阅了mongoosejs odm的文档,发现如下内容: 它们是用来干什么的?我能用它们做什么 我不确定它们是否用于流式文档或动态更新查询Javascript Mongoose.js:什么是QueryStreams,javascript,node.js,mongoose,Javascript,Node.js,Mongoose,我查阅了mongoosejs odm的文档,发现如下内容: 它们是用来干什么的?我能用它们做什么 我不确定它们是否用于流式文档或动态更新查询 关于好吧,这都是关于API的 QueryStream允许使用ReadStream的API,因此为了欣赏QueryStream,您需要了解有关ReadStream/WriteStream的更多信息 有很多优点: 您可以处理大量数据,这些数据将以“块”的形式获取,因此内存一次包含一项(可以是一个DB文档、DB行、文件中的一行,等等) 您可以暂停/恢复流 你
关于好吧,这都是关于API的
QueryStream
允许使用ReadStream
的API,因此为了欣赏QueryStream
,您需要了解有关ReadStream
/WriteStream
的更多信息
有很多优点:
- 您可以处理大量数据,这些数据将以“块”的形式获取,因此内存一次包含一项(可以是一个DB文档、DB行、文件中的一行,等等)
- 您可以暂停/恢复流
- 你可以很容易地读->写
编辑: 这更多的是关于溪流的方面。在Mongoose的例子中,单个块包含一个文档 为了阐明API的优势: node.js的
http.ServerResponse
是一个可写流,这意味着您应该能够使用一行代码将Mongoose
的结果集流式传输到浏览器:
// 'res' is the http response from your route's callback.
Posts.find().stream().pipe(res);
关键是,无论您是在向http.ServerResponse
、文件还是其他任何对象写入内容,这都无关紧要。只要它实现了一个可写流,它就应该在没有更改的情况下工作
希望我能说得更清楚。您好,如果我理解您的意思,那么如果我将视频存储在mongodb中并希望将其流式传输到客户端,那么使用QueryStream将是一个好主意。我可以暂停/恢复并选择,也不必等到从数据库加载所有内容,但是带字符串数据的普通文档呢。在那里,我只有统一API作为优点,还是有其他优点?或者我也可以使用QueryStream作为消息传递系统(没有二进制文件,buff)?@kyogron您不必使用
QueryStream
来避免使用query将完整的结果集加载到内存中。each()也会对其进行流式处理,但不要将其与streams API混淆。拥有一个标准的API使编程更加明显和可插拔QueryStream
确实是一个流,但每个块都代表一个(整个)文档。此外,MongoDB(目前)对每个文档有16MB的限制。如果要在MongoDB中存储视频,需要将每个文件拆分为多个文档,但要查找的内容已经存在,请查看GridFS
。你能解释一下消息传递的例子吗?@kyogron另外,我在答案中添加了一个API优势的例子。