Node.js实现CSV转JSON分批插入MongoDB(每批100条)求助
分批插入CSV数据到MongoDB的解决方案
要实现每100条数据一批插入MongoDB,你可以通过拆分JSON数组为小块,再循环处理每一批的方式来实现,以下是修改后的完整代码:
import csvtojson from "csvtojson"; import { DBCSV } from "./Db.js"; import mongoose from "mongoose"; const DB_URL = "mongodb+srv://mern:MERN@cluster0.nmswu.mongodb.net/CsvRecords?retryWrites=true&w=majority"; mongoose .connect(DB_URL, { useNewUrlParser: true, useUnifiedTopology: true }) .then(() => console.log("db connected")) .catch((err) => console.log(err)); // 将数组拆分为指定大小的批次 function chunkArray(arr, chunkSize) { const chunks = []; for (let i = 0; i < arr.length; i += chunkSize) { chunks.push(arr.slice(i, i + chunkSize)); } return chunks; } csvtojson() .fromFile("MCQ.csv") .then(async (jsonObj) => { const batchSize = 100; const dataChunks = chunkArray(jsonObj, batchSize); // 逐批插入数据,带错误捕获 for (const chunk of dataChunks) { try { await DBCSV.insertMany(chunk); console.log(`已插入一批共${chunk.length}条MCQ数据`); } catch (err) { console.error(`该批数据插入失败:`, err); } } console.log("所有MCQ数据插入完成"); }) .catch((err) => console.error("读取CSV文件出错:", err));
关键逻辑说明
- 拆分数组:
chunkArray函数把转换后的JSON数组按100条为一组拆分,避免一次性向数据库提交大量数据 - 异步分批插入:使用
async/await配合for...of循环,确保每一批数据插入完成后再处理下一批,便于错误追踪和控制数据库负载 - 错误处理:每一批插入单独做错误捕获,某一批失败不会中断整个插入流程,方便定位问题数据
内容的提问来源于stack exchange,提问作者Abdullah Bhatti
相关产品推荐
相关产品推荐

