web-dev-qa-db-fra.com

Comment utiliser mongoimport pour importer du csv

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 

Cela ne semble ajouter aucun document à la base de données:

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

Trace dit imported 1 objects, mais l'activation du shell Mongo et l'exécution de db.things.find() ne montrent aucun nouveau document. 

Qu'est-ce que je rate?

164
Joe

Votre exemple a fonctionné pour moi avec MongoDB 1.6.3 et 1.7.3. L'exemple ci-dessous correspond à 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 }
219
Robert Stewart

J'étais perplexe face à un problème similaire où mongoimport ne m'avait pas signalé d'erreur mais signalait l'importation de 0 enregistrements. J'avais enregistré mon fichier qui ne fonctionnait pas avec la version OSX Excel pour Mac 2011 en utilisant le paramètre par défaut "Enregistrer sous .." "xls as csv" sans spécifier le format "Windows séparé par des virgules (.csv)". Après avoir recherché ce site et essayé de nouveau le "Enregistrer sous en utilisant le format" .scv) ", mongoimport a bien fonctionné. Je pense que mongoimport attend un caractère de nouvelle ligne sur chaque ligne et que l'export par défaut au format Mac Excel 2011 csv ne fournissait pas caractère à la fin de chaque ligne.

25
user2514493

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, utilisez 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

10
d.danailov

vous aurez probablement besoin de vous authentifier si vous travaillez dans des environnements de type production. Vous pouvez utiliser quelque chose comme ceci pour vous authentifier auprès de la base de données appropriée 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'
5
blueskin

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

3
Maxence

J'utilise ceci sur Shell mongoimport

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

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

Vous pouvez en lire plus sur le document officiel .

2
R-Ling Chou

Vous devez d’abord sortir du shell mongo, puis exécuter la commande mongoimport 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$
1
user8006819

Robert Stewart a déjà expliqué comment importer avec mongoimport.

Je suggère un moyen facile d'importer CSV avec élégance avec 3T MongoChef Tool (version 3.2+). Peut 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

Voir comment importer une vidéo

1
Somnath Muluk

Les réponses de Robert Stewart sont excellentes.

J'aimerais ajouter que vous pouvez aussi 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
Thomas Pierre

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

mongoimport --uri connectionString -c questions --type csv --file questions.csv --headerline 
0
Alex Ershov

mongoimport -d test -c test --type csv - fichier 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
arnav

Mon exigence était d'importer l'instance.csv (with no headline)dans l'instance MongoDB distante. Pour la commande mongoimport v3.0.7below 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 l'apparence après l'importation:

 enter image description here 

name et email sont les colonnes du fichier .csv.

0
Arpit

Étant donné le fichier .csv que j’ai et qui n’a qu’une colonne avec 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

nom de champ désigne le nom de l'en-tête de la colonne du fichier .csv.

0
Arpit

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

0
Bhaskar

utilisation :

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

Partage pour les futurs lecteurs:

Dans notre cas, nous devions ajouter le paramètre Host pour que cela fonctionne.

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
student
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
Dinesh Shinkar

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 moi-même. Merci à tous les utilisateurs qui m'ont soutenu.

0
Sreshta Tric

Il suffit d’utiliser ceci après avoir exécuté mongoimport 

Il retournera le nombre d'objets importés 

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

renverra le nombre d'objets.

0
HarishThangavel