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