Verwendung von Mongoimport zum Importieren von CSV

189

Versuch, eine CSV mit Kontaktinformationen zu importieren:

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

Wenn Sie dies ausführen, werden der Datenbank anscheinend keine Dokumente hinzugefügt:

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

Trace sagt imported 1 objects, aber das Starten der Mongo-Shell und das Ausführen db.things.find()zeigt keine neuen Dokumente.

Was vermisse ich?

Joe
quelle
1
haben sie versucht, use mydbvor db.things.find()?
Kyle Wild
1
Ja - zeigt immer noch das andere Dokument, das in db.things war
Joe
Zum Importieren einer CSV in eine Sammlung verschachtelter Dokumente (mit Unterdokumenten
Raffael

Antworten:

243

Ihr Beispiel hat bei mir mit MongoDB 1.6.3 und 1.7.3 funktioniert. Beispiel unten war für 1.7.3. Verwenden Sie eine ältere Version von 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 }
Robert Stewart
quelle
7
Vielen Dank! Das funktioniert bei mir. Ich habe das Gleiche zuvor getan, mit der Ausnahme, dass Sie die CSV so erstellt haben, wie Sie es getan haben. Versuchte das und es funktionierte angemessen. Ich habe die Originaldatei in MS Excel erstellt, sodass am Ende jeder Zeile ein Problem mit der neuen Zeile aufgetreten ist.
Joe
Hat auch für mich gearbeitet. Ich habe die Datei mit der LF-Zeile gespeichert, die unter OS X endet, und es hat funktioniert.
Khash
Ist es möglich, alle Datensätze aus der CSV in nur 1 Objekt anstelle von 1 Objekt pro Datensatz zu importieren?
Aniket Kapse
Ja, halten Sie sich bei CSV-Aufgaben von Word fern. Ich hatte das gleiche Problem. Bugs in Word und auch in Mongoimport :(
Matt Fletcher
2
Um sich beim Importieren authentifizieren zu können, können Sie dies tunmongoimport -d db_name -c collection_name --type csv --file filename.csv --headerline --host hostname:portnumber --authenticationDatabase admin --username 'iamauser' --password 'pwd123'
Blueskin
29

Ich war verwirrt über ein ähnliches Problem, bei dem mongoimport mir keinen Fehler gab, aber den Import von 0 Datensätzen meldete. Ich hatte meine Datei, die mit der OSX Excel für Mac 2011-Version nicht funktionierte, unter Verwendung des Standardformats "Speichern unter ..." "xls as csv" gespeichert, ohne speziell das Format "Windows Comma Separated (.csv)" anzugeben. Nachdem ich diese Site recherchiert und das Format "Speichern unter erneut mit" Windows Comma Separated (.csv) "versucht habe, hat mongoimport einwandfrei funktioniert. Ich denke, mongoimport erwartet in jeder Zeile ein Zeilenumbruchzeichen, und der Standard-CSV-Export von Mac Excel 2011 hat dies nicht bereitgestellt Zeichen am Ende jeder Zeile.

user2514493
quelle
Excel ist in der Tat eine seltsame Sache bei der Verarbeitung von CSV-Dateien. Dazu gehört auch der Versuch, CSVs in andere Datenbanken zu importieren. Dies ist kein Problem im Zusammenhang mit Mongo. Ich würde vorschlagen, Google Sheets zu verwenden, wenn Sie mit CSVs herumspielen. Es ist kostenlos, online und ermöglicht den Import / Export korrekt formatierter CSVs und TSVs
MacK
21

Wir müssen den folgenden Befehl ausführen:

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

-d ist der Datenbankname

-c ist der Name der Sammlung

--headerline Wenn Sie --type csv oder --type tsv verwenden, wird die erste Zeile als Feldname verwendet. Andernfalls importiert mongoimport die erste Zeile als eigenständiges Dokument.

Für weitere Informationen: Mongoimport

d.danailov
quelle
6

Sie müssen sich höchstwahrscheinlich authentifizieren, wenn Sie in Produktionsumgebungen arbeiten. Sie können so etwas verwenden, um sich bei der richtigen Datenbank mit den entsprechenden Anmeldeinformationen zu authentifizieren.

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

Stellen Sie sicher, dass am Ende der Datei eine leere Zeile steht. Andernfalls wird die letzte Zeile bei einigen Versionen von mongoimport ignoriert

Maxence
quelle
3

Ich benutze dies auf Mongoimport Shell

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

Typ kann csv / tsv / json wählen, aber nur csv / tsv kann verwenden --headerline

Sie können mehr über das offizielle Dokument lesen .

R-Ling Chou
quelle
1

Robert Stewart hat bereits geantwortet, wie man mit mongoimport importiert.

Ich schlage eine einfache Möglichkeit vor, CSV elegant mit 3T MongoChef Tool (Version 3.2+) zu importieren . Könnte in Zukunft jemandem helfen.

  1. Sie müssen nur die Sammlung auswählen
  2. Wählen Sie die zu importierende Datei aus
  3. Sie können auch die Auswahl der zu importierenden Daten aufheben. Es gibt auch viele Möglichkeiten.
  4. Sammlung importiert

Sehen Sie, wie Sie Videos importieren

Somnath Muluk
quelle
1

Zuerst sollten Sie aus der mongoShell herauskommen und dann den mongoimportBefehl wie folgt ausführen :

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$
user8006819
quelle
$ mongoimport -d marketdata -c minibars --type csv --headerline --file '/Users/Aditya/Downloads/mstf.csv' Gurantaed Ergebnis von Manoj Barik
user8006819
1

Die Antworten von Robert Stewart sind großartig.

Ich möchte hinzufügen, dass Sie Ihre Felder auch mit --columHaveTypes und --fields wie folgt eingeben können:

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

(Achten Sie darauf, dass nach dem Komma zwischen Ihren Feldern kein Leerzeichen steht.)

Weitere Typen finden Sie im Dokument hier: https://docs.mongodb.com/manual/reference/program/mongoimport/#cmdoption-mongoimport-columnshavetypes

Thomas Pierre
quelle
1

Verwenden Sie für die Version 3.4 die folgende Syntax:

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

Nach 3 Tagen habe ich es endlich alleine geschafft. Vielen Dank an alle Benutzer, die mich unterstützt haben.

Sreshta Tric
quelle
Es gibt Tippfehler, --headerline,
Ankit Kumar
1

Beim Versuch, die CSV-Datei zu importieren, wurde eine Fehlermeldung angezeigt. Was habe ich getan. Zuerst habe ich die Spaltennamen der Kopfzeile in Großbuchstaben geändert und "-" entfernt und bei Bedarf "_" hinzugefügt. Geben Sie dann den folgenden Befehl ein, um CSV in Mongo zu importieren

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

Geben Sie hier die Bildbeschreibung ein

Pooja Khatri
quelle
Arbeitete wie Charme! Die oben erwähnte Antwort war für ältere MongoDB-Versionen, denke ich.
Raghav Sharma
0

C: \ wamp \ mongodb \ bin> mongoexport --db proj_mmm - Sammlungsangebote --csv --fieldFile Angebote_fields.txt --out Angebote.csv

Bhaskar
quelle
0

Verwenden Sie dies einfach, nachdem Sie mongoimport ausgeführt haben

Es wird die Anzahl der importierten Objekte zurückgegeben

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

gibt die Anzahl der Objekte zurück.

HarishThangavel
quelle
0

verwenden :

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

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

Sammlungsdaten prüfen: -

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
}

Arnav
quelle
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)
Dinesh Shinkar
quelle
0

Seltsamerweise erwähnte niemand die --uriFlagge:

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

Teilen für zukünftige Leser:

In unserem Fall mussten wir den hostParameter hinzufügen , damit er funktioniert

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
Mohammed Zameer
quelle
0

Meine Anforderung bestand darin, die .csv (with no headline)in eine entfernte MongoDBInstanz zu importieren . Für den mongoimport v3.0.7folgenden Befehl hat bei mir funktioniert:

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

Beispielsweise:

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

Unten sehen Sie den Screenshot, wie er nach dem Import aussieht:

Geben Sie hier die Bildbeschreibung ein

wo nameund emailsind die Spalten in der .csvDatei.

Arpit Aggarwal
quelle
0

Bei der angegebenen .csvDatei, die nur eine Spalte ohne Kopfzeile enthält , hat der folgende Befehl für mich funktioniert:

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

Dabei bezieht sich Feldname auf den Kopfzeilennamen der Spalte in der .csvDatei.

Arpit Aggarwal
quelle
0

Stellen Sie sicher, dass Sie die CSV-Datei nach / usr / local / bin oder in den Ordner kopieren, in dem sich Ihre Mondodb befindet

Guneet Singh
quelle