我有一组以XLSX格式提供给MongoDB的数据。 我应该如何将Excel文件作为输入导入到MongoDB中?
是否有可用的插件来将xlsx文件作为输入导入到MongoDB中?
我有一组以XLSX格式提供给MongoDB的数据。 我应该如何将Excel文件作为输入导入到MongoDB中?
是否有可用的插件来将xlsx文件作为输入导入到MongoDB中?
我使用了"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");
})
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();
mongoimport -d admin -c Mongocsv --type csv --file Mongocsv.csv --headerline
连接到: 127.0.0.1 成功导入了5个对象
mongo
使用 admin 数据库 切换到 admin 数据库
查询 Mongocsv 集合中的数据:db.Mongocsv.find()
有一个pymongo扩展工具包,其中一个模块可以将Excel文件导入到Mongo集合中,或将完整的Excel工作簿导入到Mongo数据库中。
您可以在此处找到文档和示例here:
您可以使用`pip install mongoUtils`安装库
如果数据库服务器不在本地,您需要指定主机、端口、用户名、密码以及数据库名称和集合名称。
mongoimport --host <hostname>:<port> --username <username> --password <password> --db <db name> --collection <collection name> --type csv --headerline --file /path/to/myfile.csv
您可以使用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而创建的应用程序的所有Java代码(https://github.com/palych-piter/Excel2DB)。