带有“ start:0”的fs.createReadStream不会重置

时间:2019-04-14 16:26:44

标签: node.js fs node-streams

我正在将多个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的模块来跳过重复的文档。

0 个答案:

没有答案