You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 18:15:50