как импортировать файл excel (XLSX) в mongoDB [закрыто]
У меня есть набор данных в качестве входных данных для MongoDB в формате XLSX. Как я должен импортировать файл Excel в качестве входных данных в MongoDB?
Есть ли какой-либо плагин для импорта xlsx файлов в качестве входных данных в MongoDB?
7 ответов:
Вы не можете импортировать XLSX-файл в MongoDB напрямую. Однако, что вы можете сделать с электронной таблицей Excel, так это сохранить ее в виде CSV-файла, а затем использовать
mongoimportдля импорта в MongoDB. Вы можете найти документацию дляmongoimportздесь , но в любом случае команда, которую вам нужно выполнить, должна выглядеть примерно так:mongoimport --db myDb --collection myCollection --type csv --headerline --file /path/to/myfile.csvВ приведенной выше команде флаг
--headerlineуказывает, что первая строка файла содержит имя полей. Есть много других вариантов, которые вы можете использовать в зависимости от ваших потребностей. Они выделены в документации .
Я использовал "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"); })
Существует пакет утилит расширения pymongo, один из модулей там делает именно это, импортирует файл excel в коллекцию mongo или полную книгу excel в базу данных mongo. Вы можете найти документацию и примеры здесь:
и вы можете установить библиотеку с помощью `pip install mongoUtils
- Вам также потребуется установить библиотеку xldr
- отказ от ответственности: я являюсь автором этой библиотеки
Вы можете загрузить данные нескольких листов из одного 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();
Если сервер БД не является локальным, необходимо указать хост, порт, имя пользователя, пароль, а также имя БД, имя коллекции.
mongoimport --host <hostname>:<port> --username <username> --password <password> --db <db name> --collection <collection name> --type csv --headerline --file /path/to/myfile.csv
Mongoimport-D admin-c Mongocsv -- type csv -- file Mongocsv.csv-Заголовок
Подключено к: 127.0.0.1 импортировано 5 объектов
Монго
Использовать admin переключился на db admin
ДБ.Монгокс.find ()
Вы можете обрабатывать загрузку содержимого файла в Excel путем написания кода Java с помощью библиотеки Apache POI в (https://poi.apache.org/). Библиотека предназначена для работы с MS данных приложения Office, включая Excel.
Я недавно создал приложение, основанное на технологии, которая поможет вам загружать файлы 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); } }Здесь вы можете найти весь Java-код для приложения, созданного для экспорта excel в Postgres (https://github.com/palych-piter/Excel2DB).
Comments