Node.js实现仅读取目录前5个文件并移至指定文件夹
修改XML批量导入MongoDB代码:限制读取前5个文件并完成后移动文件
原代码可读取Data文件夹下所有XML文件,解析后插入MongoDB的mydb数据库customers集合。现需调整为以下逻辑:
- 仅读取
Data文件夹下前5个XML文件 - 完成数据插入MongoDB后,将这些文件移动至
Done Reading文件夹
修改后的完整代码
const fs = require('fs'); const xml2js = require('xml2js'); const path = require("path"); const { MongoClient } = require('mongodb'); // 提前引入MongoClient,避免重复加载 const sourceFolder = 'Data'; const targetFolder = 'Done Reading'; const limit = 5; // 设定读取文件的数量上限 let processedCount = 0; // 确保目标文件夹存在,不存在则自动创建 if (!fs.existsSync(targetFolder)) { fs.mkdirSync(targetFolder, { recursive: true }); } // 获取Data文件夹下的XML文件列表,截取前5个 const xmlFiles = fs.readdirSync(sourceFolder) .filter(file => path.extname(file).toLowerCase() === '.xml') .slice(0, limit); // 复用MongoDB连接,避免每次插入都重新建立连接 const mongoUrl = "mongodb://localhost:27017/"; MongoClient.connect(mongoUrl) .then(client => { const db = client.db("mydb"); const collection = db.collection("customers"); const parser = new xml2js.Parser({ mergeAttrs: true, explicitArray: false }); xmlFiles.forEach(file => { const absolutePath = path.resolve(sourceFolder, file); fs.readFile(absolutePath, (err, data) => { if (err) throw err; parser.parseString(data, (parseErr, result) => { if (parseErr) throw parseErr; collection.insertOne(result) .then(() => { console.log(`XML上传成功:${absolutePath}`); // 将文件移动到目标文件夹 const targetPath = path.resolve(targetFolder, file); fs.renameSync(absolutePath, targetPath); processedCount++; // 所有文件处理完成后关闭MongoDB连接 if (processedCount === xmlFiles.length) { client.close(); console.log(`已处理并移动${processedCount}个XML文件`); } }) .catch(insertErr => { console.error(`插入失败:${absolutePath}`, insertErr); client.close(); }); }); }); }); }) .catch(connErr => { console.error("MongoDB连接失败", connErr); });
关键修改点说明
- 限制读取数量:通过
filter筛选XML文件,再用slice(0, limit)截取前5个目标文件 - 目标文件夹初始化:添加文件夹检查与创建逻辑,避免移动文件时因文件夹不存在报错
- MongoDB连接优化:提前建立并复用连接,避免每次插入都重复创建连接,提升处理效率
- 文件移动逻辑:插入成功后立即用
fs.renameSync将原文件迁移到Done Reading文件夹 - 连接关闭时机:所有文件处理完成后再关闭数据库连接,避免提前断开导致后续操作失败
内容的提问来源于stack exchange,提问作者Aksheet-Goku
相关产品推荐
相关产品推荐

