Cómo usar mongoimport para importar csv

190

Intentando importar un CSV con información de contacto:

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

Ejecutar esto no parece agregar ningún documento a la base de datos:

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

Trace dice imported 1 objects, pero encender el shell Mongo y ejecutarlo db.things.find()no muestra ningún documento nuevo.

¿Qué me estoy perdiendo?

Joe
fuente
1
intentaste use mydbantes db.things.find()?
Kyle Wild
1
Sí, todavía muestra el otro documento que estaba en db.things
Joe
para importar un CSV en una colección de documentos anidados (con subdocumentos
Raffael

Respuestas:

244

Su ejemplo funcionó para mí con MongoDB 1.6.3 y 1.7.3. El siguiente ejemplo fue para 1.7.3. ¿Estás utilizando una versión anterior 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 }
Robert Stewart
fuente
77
¡Gracias! Esto funciona para mi. Estaba haciendo lo mismo antes con la excepción de crear el CSV de la manera que lo hizo. Intenté eso y funcionó adecuadamente. Creé el archivo original en MS Excel, por lo que supongo que había un problema con la nueva línea al final de cada línea.
Joe
A mí también me funcionó. Guardé el archivo con la línea LF que termina en OS X y funcionó.
Khash
¿Es posible importar todos los registros del csv en solo 1 objeto en lugar de 1 objeto por registro?
Aniket Kapse
Sí, mantente alejado de Word cuando hagas cosas CSV. Tuve el mismo problema. Errores en Word y en mongoimport también :(
Matt Fletcher
2
Para poder autenticarse durante la importación, puede hacerlomongoimport -d db_name -c collection_name --type csv --file filename.csv --headerline --host hostname:portnumber --authenticationDatabase admin --username 'iamauser' --password 'pwd123'
blueskin el
29

Estaba perplejo con un problema similar en el que mongoimport no me dio un error, pero informaba que importaba 0 registros. Había guardado mi archivo que no funcionaba con la versión OSX Excel para Mac 2011 usando el "Guardar como .." "xls as csv" predeterminado sin especificar específicamente el formato "Windows Comma Separated (.csv)". Después de investigar este sitio y probar el formato "Guardar como nuevamente usando" Windows separado por comas (.csv) ", mongoimport funcionó bien. Creo que mongoimport espera un carácter de nueva línea en cada línea y la exportación predeterminada de CS Excel de Mac Excel 2011 no proporcionó eso carácter al final de cada línea.

usuario2514493
fuente
Excel es realmente una bestia extraña al procesar archivos CSV, que también incluye tratar de importar CSV en otras bases de datos, no es estrictamente un problema relacionado con mongo. Sugeriría usar Google Sheets cuando juegues con CSV, es gratis, en línea y también permite importar / exportar CSV y TSV formateados correctamente
MacK
21

Necesitamos ejecutar el siguiente comando:

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

-d es el nombre de la base de datos

-c es el nombre de la colección

--headerline Si usa --type csv o --type tsv, usa la primera línea como nombres de campo. De lo contrario, mongoimport importará la primera línea como un documento distinto.

Para más información: mongoimport

d.danailov
fuente
6

lo más probable es que necesite autenticarse si está trabajando en entornos de producción. Puede usar algo como esto para autenticarse en la base de datos correcta con las credenciales apropiadas.

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

Compruebe que tiene una línea en blanco al final del archivo; de lo contrario, la última línea se ignorará en algunas versiones de mongoimport

Maxence
fuente
3

Lo uso en mongoimport shell

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

type puede elegir csv / tsv / json pero solo csv / tsv puede usar --headerline

Puedes leer más sobre el documento oficial .

R-Ling Chou
fuente
1

Robert Stewart ya respondió cómo importar con mongoimport.

Estoy sugiriendo una manera fácil de importar CSV de manera elegante con 3T MongoChef Tool (versión 3.2+). Podría ayudar a alguien en el futuro.

  1. Solo necesitas seleccionar la colección
  2. Seleccionar archivo para importar
  3. También puede anular la selección de los datos que se van a importar. También hay muchas opciones disponibles.
  4. Colección importada

Vea cómo importar video

Somnath Muluk
fuente
1

Primero debe salir del mongoshell y luego ejecutar el mongoimportcomando de esta manera:

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$
usuario8006819
fuente
$ mongoimport -d marketdata -c minibars --type csv --headerline --file '/Users/Aditya/Downloads/mstf.csv' Gurantaed Resultado experimentado por Manoj Barik
usuario8006819
1

Las respuestas de Robert Stewart son geniales.

Me gustaría agregar que también puede escribir sus campos con --columHaveTypes y --fields como este:

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

(Tenga cuidado de no tener espacio después de la coma entre sus campos)

Para otros tipos, consulte el documento aquí: https://docs.mongodb.com/manual/reference/program/mongoimport/#cmdoption-mongoimport-columnshavetypes

Thomas Pierre
fuente
1

Para la versión 3.4, utilice la siguiente sintaxis:

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

Después de 3 días, finalmente lo hice por mi cuenta. Gracias a todos los usuarios que me apoyaron.

Sreshta Tric
fuente
hay error tipográfico, --headerline,
Ankit Kumar
1

Cuando intentaba importar el archivo CSV, recibía un error. Que he hecho. Primero cambié los nombres de columna de la línea de encabezado en mayúscula y eliminé "-" y agregué "_" si es necesario. Luego escribió el siguiente comando para importar CSV a mongo

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

ingrese la descripción de la imagen aquí

Pooja Khatri
fuente
Funcionó como encanto! La respuesta mencionada anteriormente fue para versiones anteriores de MongoDB, creo.
Raghav Sharma
0

C: \ wamp \ mongodb \ bin> mongoexport --db proj_mmm --colección de ofertas --csv --fieldFile offerings_fields.txt --out offerings.csv

Bhaskar
fuente
0

Solo use esto después de ejecutar mongoimport

Devolverá la cantidad de objetos importados

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

devolverá el número de objetos.

HarishThangavel
fuente
0

utilizar :

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

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

verificar datos de recopilación: -

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
fuente
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
fuente
0

Curiosamente, nadie mencionó la --uribandera:

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

Compartir para futuros lectores:

En nuestro caso, necesitábamos agregar el hostparámetro para que funcione

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
Zameer
fuente
0

Mi requisito era importar la instancia .csv (with no headline)remota MongoDB. Para el mongoimport v3.0.7siguiente comando funcionó para mí:

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

Por ejemplo:

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

A continuación se muestra la captura de pantalla de cómo se ve después de la importación:

ingrese la descripción de la imagen aquí

donde namey emailson las columnas en el .csvarchivo.

Arpit Aggarwal
fuente
0

Dado el .csvarchivo que tengo que solo tiene una columna sin encabezado , el siguiente comando funcionó para mí:

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

donde nombre-campo se refiere al nombre del encabezado de la columna en el .csvarchivo.

Arpit Aggarwal
fuente
0

Asegúrese de copiar el archivo .csv a / usr / local / bin o cualquier carpeta en la que esté su mondodb

Guneet Singh
fuente