J'ai un ensemble de données en entrée à donner à MongoDB au format XLSX. Comment suis-je censé importer le fichier Excel en tant qu'entrée dans MongoDB?
Existe-t-il un plugin disponible pour importer des fichiers xlsx en tant qu'entrée dans MongoDB?
Vous ne pouvez pas importer un fichier XLSX directement dans MongoDB. Toutefois, avec une feuille de calcul Excel, vous pouvez l’enregistrer en tant que fichier CSV, puis utilisez mongoimport
pour l’importer dans MongoDB. Vous pouvez trouver la documentation de mongoimport
here , mais dans tous les cas, la commande à exécuter doit ressembler à ceci:
mongoimport --db myDb --collection myCollection --type csv --headerline --file /path/to/myfile.csv
Dans la commande ci-dessus, l'indicateur --headerline
indique que la première ligne de votre fichier contient le nom des champs. Il existe de nombreuses autres options que vous pouvez utiliser en fonction de vos besoins. Celles-ci sont mises en évidence dans la documentation .
Il existe un paquet d'utilitaires d'extensions pymongo, un des modules y fait exactement cela, importe un fichier Excel dans une collection mongo ou un classeur Excel complet dans une base de données mongo . Vous pouvez trouver une documentation et des exemples ici :
et vous pouvez installer la bibliothèque avec `pip install mongoUtils
Vous pouvez télécharger des données de plusieurs feuilles d’un Excel à la fois dans mongodb en utilisant ce code.
Votre première ligne, "0", sera considérée comme le titre de la colonne et les données restantes de cette colonne.
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();
J'ai utilisé "fast-csv" pour télécharger csv sur la base de données mongoDB.
Exemple de code :
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");
})
mongoimport -d admin -c Mongocsv --type csv --fichier Mongocsv.csv --headerline
connecté à: 127.0.0.1 5 objets importés
mongo
utilisez admin commuté sur db admin
db.Mongocsv.find ()
Si le serveur de base de données n’est pas local, vous devrez spécifier l’hôte, le port, le nom d’utilisateur, le mot de passe, ainsi que le nom de la base de données et le nom de la collection.
mongoimport --Host <hostname>:<port> --username <username> --password <password> --db <db name> --collection <collection name> --type csv --headerline --file /path/to/myfile.csv
Vous pouvez gérer le chargement du contenu du fichier Excel en écrivant du code Java à l'aide de la bibliothèque de POI Apache ( https://poi.Apache.org/ ). La bibliothèque est développée pour travailler avec les données d'application MS Office, y compris Excel.
J'ai récemment créé l'application basée sur la technologie qui vous aidera à charger des fichiers Excel dans la base de données MongoDB.
L'application est disponible sous http://www.abespalov.com/ et n'est testée que pour Windows, mais devrait également fonctionner pour Linux. L'application crée automatiquement la collection nécessaire et la remplit avec le contenu du fichier Excel. Vous pouvez exporter plusieurs fichiers en parallèle. Vous pouvez ignorer l'étape de conversion des fichiers au format CSV. L'application gère les formats xls et xlsx.
Les étapes d'application globales sont:
1) Charge le contenu du fichier Excel. Voici le code en fonction de l'extension du fichier:
fileExtension = FilenameUtils.getExtension(inputSheetFile.getName());
if (fileExtension.equalsIgnoreCase("xlsx")) {
workbook = createWorkbook(openOPCPackage(inputSheetFile));
} else {
workbook = createWorkbook(openNPOIFSFileSystemPackage(inputSheetFile));
}
sheet = workbook.getSheetAt(0);
2) Établissez la connexion MongoDB. J'utilise la bibliothèque MongoClientURI;
MongoClientURI mongoClientURI = new MongoClientURI(
"mongodb://" + dbUser + ":" + dbPassword + "@" + dbServer
+ ":" + dbPort + "/" + dbDatabase);
Excel2db.mongoClient = new MongoClient(mongoClientURI);
3) Parcourez la feuille et insérez des lignes dans la collection. Voici un morceau de code 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);
}
}
Vous trouverez ici tout le code Java de l'application créée pour exporter Excel vers Postgres ( https://github.com/palych-piter/Excel2DB ).