我正在将多个GB JSON文件流式传输到Mongo DB集合中。 JSON文件将在完成后被删除,然后在下一次重新生成。每次文件可能具有新条目,或者完全相同,这取决于外部服务。
由于我不知道它是否会更改,因此我使用start
上的fs.createReadStream
选项从头开始。 我的问题是它实际上还没有开始。
流中的其他步骤是否有自己保存的开始位置?我认为情况并非如此,因为我测试了记录StreamValues
之后自定义转换步骤中遇到的对象(仅使用较小版本的JSON文件进行测试)。
是否缺少某些东西才能使它在第一个字节处真正重启?
const fs = require('fs');
const StreamValues = require('stream-json/streamers/StreamValues');
const streamToMongoDB = require('stream-to-mongo-db').streamToMongoDB;
fs.createReadStream(filePath, {start: 0})
.pipe(StreamValues.withParser({}))
// Object transform step
.pipe(streamToMongoDB({
dbURL: process.env.DATABASE,
collection: 'docs'
}))
.on('finish', () => {
console.info('Finished saving');
fs.unlinkSync(filePath);
});
注意:如果您要研究它,可以的,stream-to-mongo-db
每次都会创建重复的文档,但是我通过编辑要提交给PR的模块来跳过重复的文档。