Comment utiliser mongoimport pour importer des fichiers CSV


190

Essayer d'importer un CSV avec des informations de contact:

Name,Address,City,State,ZIP  
Jane Doe,123 Main St,Whereverville,CA,90210  
John Doe,555 Broadway Ave,New York,NY,10010 

L'exécution de cela ne semble pas ajouter de documents à la base de données:

$ mongoimport -d mydb -c things --type csv --file locations.csv --headerline

Trace dit imported 1 objects, mais il lance le shell Mongo et courtdb.things.find() ne montre aucun nouveau document.

Qu'est-ce que je rate?


1
avez-vous essayé use mydbavant db.things.find()?
Kyle Wild

1
Oui - montre toujours l'autre document qui était dans db.things
Joe

pour importer un CSV dans une collection de documents imbriqués (avec des sous-documents ou des tableaux), vous pouvez utiliser AWK - joyofdata.de/blog/import-csv-into-mongodb-with-awk-json
Raffael

Réponses:


244

Votre exemple a fonctionné pour moi avec MongoDB 1.6.3 et 1.7.3. L'exemple ci-dessous était pour 1.7.3. Utilisez-vous une ancienne version de MongoDB?

$ cat > locations.csv
Name,Address,City,State,ZIP
Jane Doe,123 Main St,Whereverville,CA,90210
John Doe,555 Broadway Ave,New York,NY,10010
 ctrl-d
$ mongoimport -d mydb -c things --type csv --file locations.csv --headerline
connected to: 127.0.0.1
imported 3 objects
$ mongo
MongoDB shell version: 1.7.3
connecting to: test
> use mydb
switched to db mydb
> db.things.find()
{ "_id" : ObjectId("4d32a36ed63d057130c08fca"), "Name" : "Jane Doe", "Address" : "123 Main St", "City" : "Whereverville", "State" : "CA", "ZIP" : 90210 }
{ "_id" : ObjectId("4d32a36ed63d057130c08fcb"), "Name" : "John Doe", "Address" : "555 Broadway Ave", "City" : "New York", "State" : "NY", "ZIP" : 10010 }

7
Merci! Cela fonctionne pour moi. Je faisais la même chose avant, à l'exception de la création du CSV comme vous l'avez fait. J'ai essayé cela et cela a fonctionné de manière appropriée. J'ai créé le fichier original dans MS Excel, donc je suppose qu'il y avait un problème de nouvelle ligne à la fin de chaque ligne.
Joe

A travaillé pour moi aussi. J'ai enregistré le fichier avec la fin de la ligne LF sur OS X et cela a fonctionné.
Khash

Est-il possible d'importer tous les enregistrements du csv dans un seul objet au lieu d'un objet par enregistrement?
Aniket Kapse

Oui, éloignez-vous de Word lorsque vous effectuez des tâches CSV. J'ai eu le même problème. Bugs dans Word et dans mongoimport aussi :(
Matt Fletcher

2
Pour pouvoir vous authentifier lors de l'importation, vous pouvez le fairemongoimport -d db_name -c collection_name --type csv --file filename.csv --headerline --host hostname:portnumber --authenticationDatabase admin --username 'iamauser' --password 'pwd123'
blueskin

29

J'étais perplexe avec un problème similaire où mongoimport ne m'a pas donné d'erreur mais signalait l'importation de 0 enregistrements. J'avais enregistré mon fichier qui ne fonctionnait pas en utilisant la version OSX Excel pour Mac 2011 en utilisant la valeur par défaut "Enregistrer sous .." "xls comme csv" sans spécifier spécifiquement le format "Windows Comma Separated (.csv)". Après avoir recherché ce site et essayé le format «Enregistrer sous à nouveau en utilisant le format« Windows Comma Separated (.csv) », mongoimport a bien fonctionné. Je pense que mongoimport s'attend à un caractère de nouvelle ligne sur chaque ligne et l'exportation csv par défaut de Mac Excel 2011 ne fournissait pas cela caractère à la fin de chaque ligne.


Excel est en effet une bête étrange lors du traitement de fichiers CSV, qui comprend également la tentative d'importer des CSV sur d'autres bases de données, ce n'est pas strictement un problème lié à mongo. Je suggérerais d'utiliser Google Sheets lorsque vous jouez avec des CSV, c'est gratuit, en ligne et permet d'importer / exporter des CSV et des TSV correctement formatés aussi
MacK

21

Nous devons exécuter la commande suivante:

mongoimport --host=127.0.0.1 -d database_name -c collection_name --type csv --file csv_location --headerline

-d est le nom de la base de données

-c est le nom de la collection

--headerline Si vous utilisez --type csv ou --type tsv, utilise la première ligne comme nom de champ. Sinon, mongoimport importera la première ligne en tant que document distinct.

Pour plus d'informations: mongoimport


6

vous devrez probablement vous authentifier si vous travaillez dans des environnements de production. Vous pouvez utiliser quelque chose comme ceci pour vous authentifier auprès de la base de données correcte avec les informations d'identification appropriées.

mongoimport -d db_name -c collection_name --type csv --file filename.csv --headerline --host hostname:portnumber --authenticationDatabase admin --username 'iamauser' --password 'pwd123'

3

Vérifiez que vous avez une ligne vierge à la fin du fichier, sinon la dernière ligne sera ignorée sur certaines versions de mongoimport


3

Je l'utilise sur le shell mongoimport

mongoimport --db db_name --collection collection_name --type csv --file C:\\Your_file_path\target_file.csv --headerline

le type peut choisir csv / tsv / json Mais seul csv / tsv peut utiliser --headerline

Vous pouvez en savoir plus sur la doc officielle .


1

Robert Stewart a déjà répondu pour savoir comment importer avec mongoimport.

Je suggère un moyen facile d'importer CSV avec élégance avec 3T MongoChef Tool (version 3.2+). Pourrait aider quelqu'un à l'avenir.

  1. Il vous suffit de sélectionner la collection
  2. Sélectionnez le fichier à importer
  3. Vous pouvez également désélectionner les données à importer. De nombreuses options sont également disponibles.
  4. Collection importée

Découvrez comment importer une vidéo


1

Vous devez d'abord sortir du mongoshell, puis exécuter la mongoimportcommande comme ceci:

Manojs-MacBook-Air:bin Aditya$ mongoimport -d marketdata -c minibars 
--type csv 
--headerline
--file '/Users/Aditya/Downloads/mstf.csv'

2017-05-13T20:00:41.989+0800    connected to: localhost
2017-05-13T20:00:44.123+0800    imported 97609 documents
Manojs-MacBook-Air:bin Aditya$

$ mongoimport -d marketdata -c minibars --type csv --headerline --file '/Users/Aditya/Downloads/mstf.csv' Gurantaed Résultat expérimenté par Manoj Barik
user8006819

1

Les réponses de Robert Stewart sont excellentes.

Je voudrais ajouter que vous pouvez également taper vos champs avec --columHaveTypes et --fields comme ceci:

mongoimport -d myDb -c myCollection --type csv --file myCsv.csv 
  --columnsHaveTypes --fields "label.string(),code.string(),aBoolean.boolean()"

(Attention à ne pas laisser d'espace après la virgule entre vos champs)

Pour les autres types, voir doc ici: https://docs.mongodb.com/manual/reference/program/mongoimport/#cmdoption-mongoimport-columnshavetypes


1

Pour la version 3.4, veuillez utiliser la syntaxe suivante:

mongoimport -u "username" -p "password" -d "test" -c "collections" --type csv --file myCsv.csv --headerline

Après 3 jours, je l'ai finalement fait tout seul. Merci à tous les utilisateurs qui m'ont soutenu.


il y a une faute de frappe, --headerline,
Ankit Kumar

1

Lorsque j'essayais d'importer le fichier CSV, j'obtenais une erreur. Ce que j'ai fait. J'ai d'abord changé les noms de colonne de la ligne d'en-tête en majuscule et supprimé "-" et ajouté "_" si nécessaire. Ensuite, tapez ci-dessous la commande pour importer CSV dans mongo

$ mongoimport --db=database_name --collection=collection_name --type=csv --file=file_name.csv --headerline  

entrez la description de l'image ici


A travaillé comme Charm! La réponse mentionnée ci-dessus concernait les anciennes versions de MongoDB, je pense.
Raghav Sharma

0

C: \ wamp \ mongodb \ bin> mongoexport --db proj_mmm --collection offerings --csv --fieldFile offerings_fields.txt --out offerings.csv


0

Utilisez simplement ceci après avoir exécuté mongoimport

Il renverra le nombre d'objets importés

use db
db.collectionname.find().count()

renverra le nombre d'objets.


0

utilisation :

mongoimport -d 'database_name' -c 'collection_name' --type csv --headerline --file filepath/file_name.csv

0

mongoimport -d test -c test --type csv --file SampleCSVFile_119kb.csv --headerline

vérifier les données de collecte: -

var collections = db.getCollectionNames();

for(var i = 0; i< collections.length; i++)
{    
   print('Collection: ' + collections[i]);
   // print the name of each collection
   
   db.getCollection(collections[i]).find().forEach(printjson);
   
   //and then print the json of each of its elements
}


0
1]We can save xsl as .csv file
2] Got to MongoDB bin pathon cmd - > cd D:\Arkay\soft\MongoDB\bin
3] Run below command
> mongoimport.exe -d dbname -c collectionname --type csv --file "D:\Arkay\test.csv" --headerline
4] Verify on Mongo side using below coomand.
>db.collectioname.find().pretty().limit(1)

0

Étrangement, personne n'a mentionné le --uridrapeau:

mongoimport --uri connectionString -c questions --type csv --file questions.csv --headerline 

0

Partage pour les futurs lecteurs:

Dans notre cas, nous devions ajouter le hostparamètre pour le faire fonctionner

mongoimport -h mongodb://someMongoDBhostUrl:somePORTrunningMongoDB/someDB -d someDB -c someCollection -u someUserName -p somePassword --file someCSVFile.csv --type csv --headerline --host=127.0.0.1

0

Mon exigence était d'importer l' instance .csv (with no headline)distante MongoDB. Pour la mongoimport v3.0.7commande ci-dessous a fonctionné pour moi:

mongoimport -h <host>:<port> -u <db-user> -p <db-password>  -d <database-name> -c <collection-name> --file <csv file location> --fields <name of the columns(comma seperated) in csv> --type csv

Par exemple:

mongoimport -h 1234.mlab.com:61486 -u arpitaggarwal -p password  -d my-database -c employees --file employees.csv --fields name,email --type csv

Vous trouverez ci-dessous la capture d'écran de son apparence après l'importation:

entrez la description de l'image ici

nameet emailsont les colonnes du .csvfichier.


0

Étant donné le .csvfichier que j'ai qui n'a qu'une seule colonne sans en-tête , la commande ci-dessous a fonctionné pour moi:

mongoimport -h <mongodb-host>:<mongodb-port> -u <username> -p <password> -d <mongodb-database-name> -c <collection-name> --file file.csv --fields <field-name> --type csv

field-name fait référence au nom d'en-tête de la colonne dans le .csvfichier.


0

Assurez-vous de copier le fichier .csv dans / usr / local / bin ou dans le dossier de votre mondodb

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.