Come usare mongoimport per importare csv


190

Prova di importare un CSV con le informazioni di contatto:

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

L'esecuzione di questo sembra non aggiungere alcun documento al database:

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

Dice Trace imported 1 objects, ma accendere il guscio Mongo e correre db.things.find()non mostra alcun nuovo documento.

Cosa mi sto perdendo?


1
hai provato use mydbprima db.things.find()?
Kyle Wild,

1
Sì - mostra ancora l'altro documento che era in db.things
Joe

per importare un CSV in una raccolta di documenti nidificati (con sottodocumenti
Raffael

Risposte:


244

Il tuo esempio ha funzionato per me con MongoDB 1.6.3 e 1.7.3. L'esempio seguente era per 1.7.3. Stai usando una versione precedente di 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
Grazie! Questo funziona per me. Prima stavo facendo la stessa cosa, ad eccezione della creazione del CSV come hai fatto tu. Ci ho provato e ha funzionato in modo appropriato. Ho creato il file originale in MS Excel, quindi suppongo ci fosse un problema con newline alla fine di ogni riga.
Joe

Ha funzionato anche per me. Ho salvato il file con la linea LF che termina su OS X e ha funzionato.
Khash,

È possibile importare tutti i record dal CSV in un solo oggetto invece di 1 oggetto per record?
Aniket Kapse,

Sì, stai lontano da Word quando fai cose CSV. Ho avuto lo stesso problema. Bug in Word e anche in mongoimport :(
Matt Fletcher,

2
Per poter eseguire l'autenticazione durante l'importazione, puoi farlomongoimport -d db_name -c collection_name --type csv --file filename.csv --headerline --host hostname:portnumber --authenticationDatabase admin --username 'iamauser' --password 'pwd123'
blueskin il

29

Ero perplesso per un problema simile in cui mongoimport non mi dava un errore ma riportava l'importazione di 0 record. Avevo salvato il mio file che non funzionava utilizzando la versione OSX Excel per Mac 2011 utilizzando il predefinito "Salva come .." "xls as csv" senza specificare specificamente il formato "Windows Comma Separated (.csv)". Dopo aver cercato questo sito e provato il formato "Salva con nome di nuovo usando" Windows Comma Separated (.csv) ", mongoimport ha funzionato bene. Penso che mongoimport si aspetti un carattere di nuova riga su ogni riga e l'esportazione CSV di Mac Excel 2011 predefinita non lo ha fornito carattere alla fine di ogni riga.


Excel è davvero una strana bestia durante l'elaborazione di file CSV, che include anche il tentativo di importare CSV su altri database, non è strettamente un problema legato a mongo. Suggerirei di utilizzare Fogli Google quando si gioca con i CSV, è gratuito, online e consente di importare / esportare anche CSV e TSV correttamente formattati
MacK

21

Dobbiamo eseguire il seguente comando:

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

-d è il nome del database

-c è il nome della raccolta

--headerline Se si utilizza --type csv o --type tsv, utilizza la prima riga come nomi di campo. Altrimenti, mongoimport importerà la prima riga come documento distinto.

Per maggiori informazioni: mongoimport


6

molto probabilmente dovrai autenticarti se lavori in ambienti di produzione di tipo. È possibile utilizzare qualcosa del genere per autenticarsi sul database corretto con le credenziali appropriate.

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

3

Verifica di avere una riga vuota alla fine del file, altrimenti l'ultima riga verrà ignorata su alcune versioni di mongoimport


3

Lo uso sulla shell mongoimport

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

type può scegliere csv / tsv / json ma solo csv / tsv può usare --headerline

Puoi leggere di più sul documento ufficiale .


1

Robert Stewart ha già risposto su come importare con mongoimport.

Sto suggerendo un modo semplice per importare CSV elegantemente con 3T MongoChef Tool (versione 3.2+). Potrebbe aiutare qualcuno in futuro.

  1. Devi solo selezionare la raccolta
  2. Seleziona il file da importare
  3. Puoi anche deselezionare i dati che verranno importati. Inoltre ci sono molte opzioni.
  4. Raccolta importata

Scopri come importare video


1

Per prima cosa dovresti uscire dalla mongoshell e quindi eseguire il mongoimportcomando in questo modo:

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 Risultato riscontrato da Manoj Barik
user8006819

1

Le risposte di Robert Stewart sono fantastiche.

Vorrei aggiungere che puoi anche digitare i tuoi campi con --columHaveTypes e --fields in questo modo:

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

(Attenzione a non avere spazio dopo la virgola tra i campi)

Per altri tipi, consultare il documento qui: https://docs.mongodb.com/manual/reference/program/mongoimport/#cmdoption-mongoimport-columnshavetypes


1

Per la versione 3.4, utilizzare la sintassi seguente:

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

Dopo 3 giorni, finalmente ce l'ho fatta da solo. Grazie a tutti gli utenti che mi hanno supportato.


c'è un refuso, --headerline,
Ankit Kumar il

1

Quando stavo cercando di importare il file CSV, stavo ricevendo un errore. Cosa ho fatto. Innanzitutto ho modificato i nomi delle colonne della riga di intestazione in maiuscolo e rimosso "-" e aggiunto "_" se necessario. Quindi digitato sotto il comando per importare CSV in mongo

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

inserisci qui la descrizione dell'immagine


Ha funzionato come Fascino! La risposta sopra menzionata era per le versioni precedenti di MongoDB, credo.
Raghav Sharma,

0

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


0

Usa questo dopo aver eseguito mongoimport

Restituirà il numero di oggetti importati

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

restituirà il numero di oggetti.


0

uso :

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

controllare i dati di raccolta: -

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

Stranamente nessuno ha menzionato la --uribandiera:

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

0

Condivisione per i futuri lettori:

Nel nostro caso, dovevamo aggiungere il hostparametro per farlo funzionare

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

Il mio requisito era importare l' istanza .csv (with no headline)remota MongoDB. Per il mongoimport v3.0.7comando sotto ha funzionato per me:

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

Per esempio:

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

Di seguito è riportato lo screenshot di come appare dopo l'importazione:

inserisci qui la descrizione dell'immagine

dove namee emailsono le colonne nel .csvfile.


0

Dato il .csvfile che ho che ha solo una colonna senza intestazione , sotto il comando ha funzionato per me:

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

dove field-name si riferisce al nome dell'intestazione della colonna nel .csvfile.


0

Assicurati di copiare il file .csv in / usr / local / bin o nella cartella in cui si trova mondodb

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.