Nodejs:从mongodb下载和转换大数据

时间:2016-11-15 00:37:59

标签: node.js mongodb express sails.js

我使用Node JS。 (Sails JS框架,但那不太重要)。

目的

下载包含从MongoDB转换的数据的CSV文件。

这是服务器响应大数据下载请求的情况

  1. 从MongoDB读取数据。
  2. 转换数据格式(转换为CSV)。
  3. 将数据发送给响应。 (下载)。
  4. 因此,用户需要将这些大数据下载到他们的浏览器中。

    我不确定处理此类请求的最佳方法是什么。

2 个答案:

答案 0 :(得分:0)

MongoDB内置了对流的支持,Node.js客户端可以为游标提供可读的流。所有HTTP响应对象还提供了一种通过一系列写入来流式传输响应主体的方法,或者在使用WebSockets时可以管道到套接字。大部分工作将被卸载到MongoDB服务器,而Node.js是为满足这些要求而开发的。

如果您要在客户端使用HTTP,则可以使用fetch()并将响应主体流式传输到内存中。以下是excellent article,其中显示了如何有效处理大型CSV文件的响应:

const res = await fetch('/big-data.csv')
const csvStream = response.body
    .pipeThrough(new TextDecoder())
    .pipeThrough(new CSVDecoder())

for (;;) {
    const {row, done} = await csvStream.read()

    if (done) break
    drain(row)
}

不要忘记服务器和客户端都支持编码内容,因此请确保压缩响应以进一步改善I / O.

答案 1 :(得分:-1)

到目前为止,发布一些您尝试过的代码总是一个好主意。

首先,如果使用SailsJS,则必须使用mongoose或Waterline等方式从MongoDB检索数据

其次,您可以使用像csv这样的库将数据转换为csv文件。

创建文件后,您可以使用sails响应将文件返回给用户,如下所示:

res.attachment('path/to/file.csv');