Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/467.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Mongoose.js:什么是QueryStreams_Javascript_Node.js_Mongoose - Fatal编程技术网

Javascript Mongoose.js:什么是QueryStreams

Javascript Mongoose.js:什么是QueryStreams,javascript,node.js,mongoose,Javascript,Node.js,Mongoose,我查阅了mongoosejs odm的文档,发现如下内容: 它们是用来干什么的?我能用它们做什么 我不确定它们是否用于流式文档或动态更新查询 关于好吧,这都是关于API的 QueryStream允许使用ReadStream的API,因此为了欣赏QueryStream,您需要了解有关ReadStream/WriteStream的更多信息 有很多优点: 您可以处理大量数据,这些数据将以“块”的形式获取,因此内存一次包含一项(可以是一个DB文档、DB行、文件中的一行,等等) 您可以暂停/恢复流 你

我查阅了mongoosejs odm的文档,发现如下内容:

它们是用来干什么的?我能用它们做什么

我不确定它们是否用于流式文档或动态更新查询


关于

好吧,这都是关于API的

QueryStream
允许使用
ReadStream
的API,因此为了欣赏
QueryStream
,您需要了解有关
ReadStream
/
WriteStream
的更多信息

有很多优点:

  • 您可以处理大量数据,这些数据将以“块”的形式获取,因此内存一次包含一项(可以是一个DB文档、DB行、文件中的一行,等等)
  • 您可以暂停/恢复流
  • 你可以很容易地读->写
其思想是,它为您提供了一个用于读写操作的统一API

要回答您的问题“我可以用它们做什么”:

您可以使用node.js的流API做任何事情,也可以不使用node.js的流API做任何事情,但如果有某种标准,它肯定会使它更清晰、更易于使用

另外,node.js的流是基于事件的(基于EventEmitter),因此它有助于解耦


编辑:

这更多的是关于溪流的方面。在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优势的例子。