fs.createReadStream с `start: 0` не сбрасывается - PullRequest
0 голосов
/ 14 апреля 2019

Я передаю 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.

...