Como usar o mongoimport para importar csv


189

Tentando importar um CSV com informações de contato:

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

A execução disso não parece adicionar nenhum documento ao banco de dados:

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

Trace diz imported 1 objects, mas iniciar o shell Mongo e executar db.things.find()não mostra novos documentos.

o que estou perdendo?


1
você tentou use mydbantes db.things.find()?
Kyle selvagem

1
Sim - ainda mostra o outro documento que estava no db.things
Joe

para importar um arquivo CSV em uma coleção de documentos aninhados (com sub-documentos ou matrizes) você pode usar AWK - joyofdata.de/blog/import-csv-into-mongodb-with-awk-json
Raffael

Respostas:


243

Seu exemplo funcionou para mim com o MongoDB 1.6.3 e 1.7.3. O exemplo abaixo foi para 1.7.3. Você está usando uma versão mais antiga do 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
Obrigado! Isso funciona para mim. Eu estava fazendo a mesma coisa antes, com exceção de criar o CSV da maneira que você fez. Tentei isso e funcionou adequadamente. Eu criei o arquivo original no MS Excel, então acho que havia um problema com a nova linha no final de cada linha.
Joe

Trabalhou para mim também. Salvei o arquivo com a linha LF terminada no OS X e funcionou.
Khash

É possível importar todos os registros do csv em apenas 1 objeto em vez de 1 objeto por registro?
Aniket Kapse

Sim, fique longe do Word ao fazer coisas em CSV. Eu tive o mesmo problema. Bugs no Word e em mongoimport muito :(
Matt Fletcher

2
Para poder se autenticar durante a importação, você pode fazermongoimport -d db_name -c collection_name --type csv --file filename.csv --headerline --host hostname:portnumber --authenticationDatabase admin --username 'iamauser' --password 'pwd123'
blueskin

29

Fiquei perplexo com um problema semelhante em que o mongoimport não me deu um erro, mas relataria a importação de 0 registros. Eu salvei meu arquivo que não funcionava usando a versão OSX Excel para Mac 2011 usando o padrão "Salvar como ..." "xls como csv" sem especificar o formato "Windows Comma Separated (.csv)" especificamente. Depois de pesquisar neste site e tentar o formato "Salvar como novamente usando o Windows separado por vírgula (.csv)", o mongoimport funcionou bem. Acho que o mongoimport espera um caractere de nova linha em cada linha e a exportação csv padrão do Mac Excel 2011 não forneceu isso caractere no final de cada linha.


O Excel é realmente um animal estranho ao processar arquivos CSV, que também inclui tentar importar CSVs em outros bancos de dados, não é estritamente um problema relacionado ao mongo. Gostaria de sugerir a usar planilhas do Google quando a brincar com CSVs, é gratuito, online e permite a importação / exportação CSVs devidamente formatados e TSVs também
MacK

21

Precisamos executar o seguinte comando:

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

-d é o nome do banco de dados

-c é o nome da coleção

--headerline Se estiver usando --type csv ou --type tsv, use a primeira linha como nomes de campo. Caso contrário, o mongoimport importará a primeira linha como um documento distinto.

Para mais informações: mongoimport


6

você provavelmente precisará se autenticar se estiver trabalhando em ambientes de produção. Você pode usar algo assim para se autenticar no banco de dados correto com credenciais apropriadas.

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

3

Verifique se você tem uma linha em branco no final do arquivo, caso contrário, a última linha será ignorada em algumas versões do mongoimport


3

Eu uso isso no shell mongoimport

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

tipo pode escolher csv / tsv / json Mas apenas csv / tsv pode usar --headerline

Você pode ler mais sobre o documento oficial .


1

Robert Stewart já respondeu sobre como importar com mongoimport.

Estou sugerindo uma maneira fácil de importar CSV de forma elegante com o 3T MongoChef Tool (versão 3.2+). Pode ajudar alguém no futuro.

  1. Você só precisa selecionar a coleção
  2. Selecionar arquivo para importar
  3. Você também pode desmarcar os dados que serão importados. Também existem muitas opções.
  4. Coleção importada

Veja como importar vídeo


1

Primeiro você deve sair do mongoshell e depois executar o mongoimportcomando da seguinte maneira:

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 minibares --type csv --headerline --file '/Users/Aditya/Downloads/mstf.csv' Gurantaed Resultado experimentado por Manoj Barik
user8006819

1

As respostas de Robert Stewart são ótimas.

Gostaria de acrescentar que você também pode digitar seus campos com --columHaveTypes e --fields como este:

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

(Cuidado para não haver espaço após a vírgula entre seus campos)

Para outros tipos, consulte o documento aqui: https://docs.mongodb.com/manual/reference/program/mongoimport/#cmdoption-mongoimport-columnshavetypes


1

Para a versão 3.4, use a seguinte sintaxe:

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

Depois de 3 dias, finalmente consegui fazer isso sozinho. Obrigado a todos os usuários que me apoiaram.


há erro de digitação, --headerline,
Ankit Kumar

1

Quando estava tentando importar o arquivo CSV, estava recebendo um erro. O que eu fiz. Primeiro, alterei os nomes das colunas da linha de cabeçalho em maiúscula e removi "-" e adicionei "_", se necessário. Em seguida, digite o comando abaixo para importar o CSV para o mongo

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

insira a descrição da imagem aqui


Trabalhou como charme! A resposta acima mencionada foi para versões mais antigas do MongoDB, eu acho.
Raghav Sharma 21/03

0

C: \ wamp \ mongodb \ bin> mongoexport --db proj_mmm - ofertas de coleção --csv --fieldFile offerings_fields.txt --out offerings.csv


0

Basta usar isso depois de executar o mongoimport

Retornará o número de objetos importados

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

retornará o número de objetos.


0

usar :

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

verificar dados de coleta: -

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

Estranhamente ninguém mencionou a --uribandeira:

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

0

Compartilhamento para futuros leitores:

No nosso caso, precisamos adicionar o hostparâmetro para fazê-lo funcionar

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

Meu requisito era importar a instância .csv (with no headline)remota MongoDB. Para o mongoimport v3.0.7comando abaixo funcionou para mim:

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 exemplo:

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

Abaixo está a captura de tela de como fica após a importação:

insira a descrição da imagem aqui

onde namee emailsão as colunas no .csvarquivo.


0

Dado .csvarquivo que tenho que possui apenas uma coluna sem cabeçalho , o comando abaixo funcionou para mim:

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

onde nome do campo se refere ao nome do cabeçalho da coluna no .csvarquivo.


0

Certifique-se de copiar o arquivo .csv para / usr / local / bin ou qualquer outra pasta em que o mondodb esteja

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.