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

如何仅将CSV文件数据(JSON格式)存入MongoDB?

解决CSV上传后仅存二进制数据到MongoDB的问题

嘿,我看你现在的问题是上传CSV后MongoDB里只显示ObjectId和二进制数据对吧?这是因为你直接把上传的文件二进制内容存进数据库了,没有先把CSV解析成结构化的JSON格式。结合你已经引入的formidable、csvtojson和mongodb库,我给你调整一下代码逻辑,确保CSV数据能以JSON格式存入数据库:

核心修改思路

  • 用formidable处理文件上传,拿到临时文件路径
  • 用csvtojson把CSV文件解析成JSON数组
  • 将解析后的JSON数组批量插入MongoDB

修改后的完整代码片段

var http = require('http');
var fs = require('fs');
var formidable = require('formidable');
var Converter = require("csvtojson").Converter;
var mongodb = require('mongodb');
var MongoClient = mongodb.MongoClient;
var url = 'mongodb://localhost:27017/CSVDATA';

http.createServer(function(req, res) {
  // 处理上传请求
  if (req.url == '/upload' && req.method.toLowerCase() == 'post') {
    const form = new formidable.IncomingForm();
    
    form.parse(req, function(err, fields, files) {
      if (err) {
        res.writeHead(500, {'Content-Type': 'text/plain'});
        return res.end('上传出错: ' + err.message);
      }

      // 替换成你表单中文件输入框的name属性值
      const csvFile = files.yourFileInputName;
      if (!csvFile) {
        res.writeHead(400, {'Content-Type': 'text/plain'});
        return res.end('请选择要上传的CSV文件');
      }

      // 初始化CSV转JSON转换器
      const converter = new Converter({
        // 可以根据你的CSV格式配置,比如分隔符、是否忽略空行等
        // delimiter: ';', // 如果是分号分隔的CSV就打开这个注释
        // ignoreEmpty: true
      });

      // 监听解析完成事件
      converter.on("end_parsed", function(jsonDataArray) {
        // 连接MongoDB
        MongoClient.connect(url, function(err, db) {
          if (err) {
            res.writeHead(500, {'Content-Type': 'text/plain'});
            return res.end('数据库连接失败: ' + err.message);
          }

          // 替换成你要存储的集合名称
          const collection = db.collection('csv_records');
          // 批量插入JSON数据
          collection.insertMany(jsonDataArray, function(err, result) {
            if (err) {
              res.writeHead(500, {'Content-Type': 'text/plain'});
              res.end('插入数据失败: ' + err.message);
            } else {
              res.writeHead(200, {'Content-Type': 'text/plain'});
              res.end(`成功插入 ${result.insertedCount} 条CSV数据到MongoDB`);
            }
            // 关闭数据库连接
            db.close();
            // 可选:删除formidable生成的临时文件,释放磁盘空间
            fs.unlink(csvFile.path, (unlinkErr) => {
              if (unlinkErr) console.log('删除临时文件失败:', unlinkErr);
            });
          });
        });
      });

      // 读取临时CSV文件并开始解析
      fs.createReadStream(csvFile.path).pipe(converter);
    });

    return;
  }

  // 显示上传表单(方便测试用)
  res.writeHead(200, {'Content-Type': 'text/html'});
  res.end(`
    <form action="/upload" method="post" enctype="multipart/form-data">
      <h3>上传CSV文件</h3>
      <input type="file" name="yourFileInputName" accept=".csv" required />
      <br><br>
      <button type="submit">上传并导入到MongoDB</button>
    </form>
  `);
}).listen(8080);

console.log('服务器运行在 http://localhost:8080');

关键注意事项

  • 记得把代码中的yourFileInputName替换成你HTML表单里文件输入框的name属性值
  • csv_records是MongoDB的集合名,你可以改成自己需要的名称
  • 如果你的CSV不是用逗号分隔的(比如分号、制表符),可以在创建Converter时配置delimiter参数
  • 解析后的JSON会自动把CSV的第一行作为每个文档的键名,所以确保你的CSV表头是正确的
  • 上传完成后可以删除formidable生成的临时文件,避免磁盘空间浪费

内容的提问来源于stack exchange,提问作者Dinesh Chebolu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:20:29