Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

181
Views
El flujo de Node JS duplica los datos

Actualmente estoy trabajando en un proyecto en el que tengo que leer un archivo .csv grande y cargar su contenido en una colección de MongoDB. Para leer los archivos CSV, estoy usando el módulo @fast-csv/parse npm. Además, estoy usando la API de transmisión de node js para pausar la transmisión e insertar 200 documentos por lote en una colección de MongoDB. Después de eso, retomo la transmisión. Aquí está el código.

 module.exports.seedProductCollection = (filepath) => new Promise((resolve, reject) => { let documents = []; let counter = 0; const stream = fs.createReadStream(filepath); stream.pipe(csv.parse({ headers: true })) .on('error', (error) => reject(error)) .on('data', async (row) => { if (documents.length >= 200) { stream.pause(); try { documents.push(row); await db.Product.insertMany(documents); counter += documents.length; console.log('counter: ', counter); documents = []; stream.resume(); } catch (error) { reject(error); } } else { documents.push(row); } }) .on('end', async () => { if (documents.length > 0) { try { await db.Product.insertMany(documents); counter += documents.length; } catch (error) { reject(error); } } resolve(counter); }); });

Entonces, básicamente, creé un readStream desde el archivo .csv e inserté cada fila del archivo .csv como un objeto JavaSCript en la matriz de documentos. Cuando la matriz de documentos tiene 200 objetos, pausé la transmisión usando stream.pause() . Luego, inserte estos 200 objetos en una colección MongoDB y luego reanude nuevamente la transmisión usando stream.resume() . Además, asignando a la matriz de documentos una matriz vacía documents = [] . Una vez finalizada la transmisión de lectura, en el detector de eventos stream.on('end'), verifico si hay más objetos en la matriz de documentos y, si tiene alguno, los inserto nuevamente en la colección. Ahora, el problema es que, cuando verifico la colección en MongoDB, noté que después de cada 200 documentos, los documentos se repiten nuevamente de esta manera.

 { id: 1, name: 'product1', description: 'this is product1' }, { id: 2, name: 'product2', description: 'this is product2' }, ..... { id: 200, name: 'product200', description: 'this is product200' }, { id: 1, name: 'product1', description: 'this is product1' }, { id: 2, name: 'product2', description: 'this is product2' },

Como puede ver, después de productId 200, los documentos se repiten nuevamente y las secuencias ingresan en un bucle infinito. Si cambio la longitud de la matriz de documentos de 200 a 100, sucede después de cada 100 elementos. Estoy realmente atascado en este punto. Intenté un par de cosas, pero nada funcionó. Cualquier ayuda sería muy apreciada. Gracias por adelantado.

about 4 years ago · Juan Pablo Isaza
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!