【问题标题】:how to import excel file (XLSX) to mongoDB [closed]如何将excel文件(XLSX)导入mongoDB [关闭]
【发布时间】:2014-10-04 04:14:18
【问题描述】:

我有一组数据作为输入,以 XLSX 格式提供给 MongoDB。我应该如何将 Excel 文件作为输入导入 MongoDB?

是否有任何插件可用于导入 xlsx 文件作为 MongoDB 的输入?

【问题讨论】:

  • 没有。但是您可以使用 xlsx 模块(npmjs.org/package/node-xlsx)来读取 XLSX,然后使用 mongoose 将信息添加到 mongodb。加上这两个步骤之间的中间代码以准备数据。
  • github.com/Moblox/mongo-xlsx 为你做中间工作
  • @alandarev: node-xlsx 可以读取多张excel文件吗?

标签: mongodb import import-from-excel


【解决方案1】:

您可以通过使用 Apache POI 库 (https://poi.apache.org/) 编写 Java 代码来处理加载 Excel 文件内容。该库是为处理包括 Excel 在内的 MS Office 应用程序数据而开发的。

我最近基于可帮助您将 Excel 文件加载到 MongoDB 数据库的技术创建了应用程序。

该应用程序在http://www.abespalov.com/ 下可用,并且仅针对 Windows 进行了测试,但也应适用于 Linux。应用程序将自动创建必要的集合并使用 Excel 文件内容填充集合。您可以并行导出多个文件。您可以跳过将文件转换为 CSV 格式的步骤。该应用程序处理 xls 和 xlsx 格式。

总体应用阶段为:

1) 加载excel文件内容。这是取决于文件扩展名的代码:

fileExtension = FilenameUtils.getExtension(inputSheetFile.getName());

if (fileExtension.equalsIgnoreCase("xlsx")) {
        workbook = createWorkbook(openOPCPackage(inputSheetFile));
} else {
        workbook = createWorkbook(openNPOIFSFileSystemPackage(inputSheetFile));
}

sheet = workbook.getSheetAt(0);

2) 建立 MongoDB 连接。我使用 MongoClientURI 库;

MongoClientURI mongoClientURI = new MongoClientURI(
                    "mongodb://" + dbUser + ":" + dbPassword + "@" + dbServer 
+ ":" + dbPort + "/" + dbDatabase);
            excel2db.mongoClient = new MongoClient(mongoClientURI);

3) 遍历工作表并将行插入到集合中。这是一段Java代码:

Row row = (Row) rowIterator.next();

    //get column names from a header
    short minColIdx = row.getFirstCellNum();
    short maxColIdx = row.getLastCellNum();

    ArrayList<String> columnNameList = new ArrayList();
    String columnName;

    logger.info("The table {} is being populated", tableName);

    //populate a list of column names
    for (short colIdx = minColIdx; colIdx < maxColIdx; colIdx = (short) (colIdx + 1)) {
        columnNameList.add(row.getCell(colIdx) == null? "": row.getCell(colIdx).toString());
    }

    while (rowIterator.hasNext()) {

        Document document = new Document();
        Row rowData = (Row) rowIterator.next();

        numOfProcessedRows++;
        for (short colIdx = minColIdx; colIdx < maxColIdx; colIdx = (short) (colIdx + 1)) {
            document.put(columnNameList.get(colIdx), rowData.getCell(colIdx).toString());
        }

        //save the document into a collection, point to the database
        MongoCollection mongoCollection = mongoDB.getCollection(tableName);
        mongoCollection.insertOne(document);

    }
}    

在这里您可以找到为将 excel 导出到 Postgres (https://github.com/palych-piter/Excel2DB) 而创建的应用程序的所有 Java 代码。

【讨论】:

    【解决方案2】:

    mongoimport -d admin -c Mongocsv --type csv --file Mongocsv.csv --headerline

    连接到:127.0.0.1 导入 5 个对象

    蒙哥

    使用管理员 切换到数据库管理员

    db.Mongocsv.find()

    【讨论】:

      【解决方案3】:

      如果数据库服务器不是本地的,您必须指定主机、端口、用户名、密码以及数据库名称、集合名称。

      mongoimport --host <hostname>:<port> --username <username> --password <password> --db <db name> --collection <collection name> --type csv --headerline --file /path/to/myfile.csv
      

      【讨论】:

        【解决方案4】:

        您可以使用此代码一次将upload data of multiple sheets 从一个 excel 转换为 mongodb。
        您的第一行,即“0”行将被视为该列的列标题和其余数据。

        MongoClient mongoClient = new MongoClient( "localhost" , 27017 );
                   DB db = mongoClient.getDB("yourdb_name");
                   System.out.println("Connected to Database successfully");
                   DBCollection coll = db.getCollection("your_collection name");
                   System.out.println("Collection your_collection name selected successfully");
        
                        DBCollection OR = db.getCollection("Input_Container");
                        System.out.println("Collection Device_Details selected successfully");
                        OR.drop();
                        DBObject arg1 = null;
                        //coll.update(query, update);
                        DBCollection OR_UPLOAD = 
                        db.createCollection("Input_Container", arg1);
                        String path =" your file path";
        
                        File myFile = new File(path);
                        FileInputStream inputStream = new FileInputStream(myFile);
                        XSSFWorkbook workbook = new XSSFWorkbook(inputStream);
                        int number=workbook.getNumberOfSheets();
                          System.out.println("NumberOfSheets "+number);
        
                          for(int i=0;i<number;i++)
                          {
                        XSSFSheet sheet = workbook.getSheetAt(i);
                        int col_value=sheet.getRow(0).getLastCellNum();
                        int row_num= sheet.getLastRowNum();
                        System.out.println("row_num "+row_num);
                        List<String> DBheader = new ArrayList<String>();
                        List<String> Data = new ArrayList<String>();
        
                        for(int z=1;z<=row_num;z++){
                             DBheader.clear();
                             Data.clear();
                         for(int j=0;j<col_value;j++)
                        {
                            if(sheet.getRow(0).getCell(j).toString()!=null || sheet.getRow(0)!=null)
                            {
                            String cel_value = sheet.getRow(0).getCell(j).toString();
                            DBheader.add(cel_value.trim());
                            }
                            else{
                                break;
        
                            }
                        }
                        for(int k=0;k<col_value;k++){
                            String data =" ";   
                            if(sheet.getRow(z).getCell(k)!=null)
                            {
                            data =  sheet.getRow(z).getCell(k).toString();
                            }
                            Data.add(data.trim());
        
                            }
                        BasicDBObject doc = new BasicDBObject();
                        System.out.println("Data.size() "+Data.size());
        
                        int l=0;
                        for(String headers:DBheader)
                        { 
                        if(l>Data.size()){break;}
                            doc.append(headers, Data.get(l));
                            l++;
                         }
                        OR_UPLOAD.insert(doc);
                        }
        
                    }System.out.println("File Upload Done");
                          mongoClient.close();
        

        【讨论】:

          【解决方案5】:

          有一个 pymongo 扩展实用程序包,其中一个模块正是这样做的,将 excel 文件导入 mongo 集合或将完整的 excel 工作簿导入 mongo 数据库。 您可以找到文档和示例here:
          您可以使用 `pip install mongoUtils

          安装该库
          • 您还需要安装 xldr 库
          • 免责声明:我是这个库的作者

          【讨论】:

          • drop_collection=True 使程序崩溃,因此如果您不想每次都删除您的收藏,但需要更新它,则它不可用
          • @nickmilon - 嘿!我根本无法让 mongoUtils(v1.1.8) 工作。我得到:AttributeError:模块'mongoUtils'没有属性'import_workbook'。其他人尝试过这个库吗?
          【解决方案6】:

          我使用 "fast-csv" 将 csv 上传到 mongoDB 数据库。

          示例代码

          var csv = require("fast-csv");
          
          csv.fromPath('./test.csv',{headers: true})
              .on("data", function(data){
                 var details = new Details;
                 details=data;
                 details.save(function (saveErr, savedetail) {
                       if (saveErr) {
                             console.log(saveErr)
                       }
                  });
              })
              .on("end", function(){
                  console.log("done");
              })
          

          【讨论】:

            【解决方案7】:

            您不能将 XLSX 文件直接导入 MongoDB。但是,您可以使用 Excel 电子表格将其保存为 CSV 文件,然后使用 mongoimport 将其导入 MongoDB。您可以找到mongoimporthere 的文档,但无论如何,您需要运行的命令应该如下所示:

            mongoimport --db myDb --collection myCollection --type csv --headerline --file /path/to/myfile.csv
            

            在上面的命令中,--headerline 标志表示文件中的第一行包含字段的名称。您可以根据需要使用许多其他选项。这些在documentation 中突出显示。

            【讨论】:

              猜你喜欢
              • 2012-05-16
              • 2021-08-03
              • 2015-10-17
              • 2017-01-29
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2017-04-05
              • 1970-01-01
              相关资源
              最近更新 更多