将大量数据直接从mongodb查询流式传输到nodejs响应中



我正在构建MERN堆栈应用程序,有一次我需要从mongodb数据库中获取大量数据,所以我遇到了mongodb流,我想知道实现这一点的最佳方法是什么。我试过这两种选择:

var stream = Product.find({}).stream();
stream.on('error', (err) => {
console.error(err)
});
stream.on('data', (doc) => {
return res.json(doc);
});

在本例中,我收到一个错误发送到客户端后无法设置标头。第二次尝试:

await Product.find({})
.cursor()
.pipe(JSON.stringify())
.pipe(res);

在本例中,我得到无法读取未定义的属性'on'。我找不到对整个cursor((.pipe((链接的正确解释,所以如果有人知道的话,如果你能解释这个逻辑,我会非常高兴。我不想在这个例子中使用分页。

您只能向客户端发送一次响应。一旦发送,连接就会关闭。在您的情况下,您尝试多次发送响应,因此出现错误。

您需要使用websocket或服务器发送的事件来流式传输数据。

我通常使用这个流:

var stream = Product.find({}).stream();
const results = [];
stream.on('error', (err) => {
console.error(err)
});
stream.on('data', (doc) => {
results.push(doc);
});
stream.on('end', () => {
res.json(results)
})

最新更新