Jak korzystać z Mongoimport do importowania CSV

190

Próbuję zaimportować plik CSV z danymi kontaktowymi:

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

Uruchomienie tego nie wydaje się dodawać żadnych dokumentów do bazy danych:

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

Trace mówi imported 1 objects, ale odpalenie powłoki Mongo i uruchomienie db.things.find()nie pokazuje żadnych nowych dokumentów.

czego mi brakuje?

Joe
źródło
1
próbowałeś use mydbwcześniej db.things.find()?
Kyle Wild
1
Tak - nadal pokazuje inny dokument, który był w db.things
Joe
do importowania CSV do zbioru zagnieżdżonych dokumentów (z poddokumentami
Raffael

Odpowiedzi:

244

Twój przykład pracował dla mnie z MongoDB 1.6.3 i 1.7.3. Przykład poniżej dotyczył wersji 1.7.3. Czy używasz starszej wersji 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
źródło
7
Dzięki! To działa dla mnie. Robiłem to samo wcześniej, z wyjątkiem tworzenia pliku CSV tak, jak to robiłeś. Próbowałem tego i działało odpowiednio. Utworzyłem oryginalny plik w MS Excel, więc zgadując, wystąpił problem z znakiem nowej linii na końcu każdej linii.
Joe
Pracowałem też dla mnie. Zapisałem plik z linią LF kończącą się na OS X i zadziałało.
Khash,
Czy można zaimportować wszystkie rekordy z pliku csv do tylko 1 obiektu zamiast 1 obiektu na rekord?
Aniket Kapse
Tak, trzymaj się z dala od Worda podczas robienia rzeczy CSV. Miałem ten sam problem. Błędy w programie Word i Mongoimport :(
Matt Fletcher
2
Aby móc się uwierzytelnić podczas importowania, możesz to zrobićmongoimport -d db_name -c collection_name --type csv --file filename.csv --headerline --host hostname:portnumber --authenticationDatabase admin --username 'iamauser' --password 'pwd123'
blueskin
29

Byłem zakłopotany podobnym problemem, gdy mongoimport nie dał mi błędu, ale zgłosiłbym importowanie 0 rekordów. Zapisałem plik, który nie działał w wersji OSX Excel dla komputerów Mac 2011, używając domyślnego formatu „Zapisz jako ..” „xls as csv” bez szczególnego określenia formatu „Windows Comma Separated (.csv)”. Po przeszukaniu tej witryny i wypróbowaniu formatu „Zapisz jako ponownie przy użyciu systemu Windows rozdzielanego przecinkami przecinkowymi (.csv)” mongoimport działał dobrze. Myślę, że mongoimport oczekuje znaku nowej linii w każdej linii, a domyślny eksport csv dla Mac Excel 2011 nie zapewnił tego znak na końcu każdej linii.

użytkownik2514493
źródło
Excel jest rzeczywiście dziwną bestią podczas przetwarzania plików CSV, która obejmuje również próbę importowania CSV do innych baz danych, nie jest to ściśle problem związany z mongo. Proponuję używać Arkuszy Google podczas zabawy z CSV, jest bezpłatny, online i pozwala importować / eksportować odpowiednio sformatowane CSV i TSV
MacK
21

Musimy wykonać następujące polecenie:

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

-d to nazwa bazy danych

-c to nazwa kolekcji

--headerline Jeśli używasz opcji --type csv lub --type tsv, używa pierwszego wiersza jako nazw pól. W przeciwnym razie mongoimport zaimportuje pierwszy wiersz jako osobny dokument.

Aby uzyskać więcej informacji: mongoimport

d.danailov
źródło
6

najprawdopodobniej będziesz musiał się uwierzytelnić, jeśli pracujesz w środowisku produkcyjnym. Możesz użyć czegoś takiego do uwierzytelnienia na właściwej bazie danych przy użyciu odpowiednich poświadczeń.

mongoimport -d db_name -c collection_name --type csv --file filename.csv --headerline --host hostname:portnumber --authenticationDatabase admin --username 'iamauser' --password 'pwd123'
blueskin
źródło
3

Sprawdź, czy na końcu pliku jest pusty wiersz, w przeciwnym razie ostatni wiersz zostanie zignorowany w niektórych wersjach mongoimportu

Maxence
źródło
3

Używam tego w powłoce mongoimport

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

typ może wybrać csv / tsv / json Ale może używać tylko csv / tsv --headerline

Możesz przeczytać więcej na oficjalnym dokumencie .

R-Ling Chou
źródło
1

Robert Stewart już odpowiedział na pytanie, jak importować z Mongoimport.

Sugeruję prosty sposób eleganckiego importu CSV za pomocą narzędzia 3T MongoChef Tool (wersja 3.2+). Może pomóc komuś w przyszłości.

  1. Musisz tylko wybrać kolekcję
  2. Wybierz plik do zaimportowania
  3. Możesz także odznaczyć dane, które chcesz zaimportować. Istnieje również wiele opcji.
  4. Kolekcja została zaimportowana

Zobacz, jak zaimportować wideo

Somnath Muluk
źródło
1

Najpierw powinieneś wyjść z mongopowłoki, a następnie wykonać mongoimportpolecenie w następujący sposób:

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$
użytkownik8006819
źródło
$ mongoimport -d marketdata -c minibary --type csv --headerline --file '/Users/Aditya/Downloads/mstf.csv' Gurantaed Wynik doświadczony przez Manoj Barik
8006819
1

Odpowiedzi Roberta Stewarta są świetne.

Chciałbym dodać, że możesz także wpisać swoje pola za pomocą --columHaveTypes i --field w następujący sposób:

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

(Uważaj, aby nie mieć spacji po przecinku między polami)

W przypadku innych typów zobacz dokument tutaj: https://docs.mongodb.com/manual/reference/program/mongoimport/#cmdoption-mongoimport-columnshavetypes

Thomas Pierre
źródło
1

W przypadku wersji 3.4 użyj następującej składni:

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

Po 3 dniach w końcu sam to zrobiłem. Dziękujemy wszystkim użytkownikom, którzy mnie wspierali.

Sreshta Tric
źródło
jest literówka, --headerline,
Ankit Kumar
1

Podczas próby zaimportowania pliku CSV wystąpił błąd. Co zrobiłem Najpierw zmieniłem nazwy kolumn nagłówka wielką literą i usunąłem „-” i dodałem „_” w razie potrzeby. Następnie wpisz poniżej polecenie importowania CSV do mongo

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

wprowadź opis zdjęcia tutaj

Pooja Khatri
źródło
Działa jak Urok! Powyższa odpowiedź była, jak sądzę, dla starszych wersji MongoDB.
Raghav Sharma
0

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

Bhaskar
źródło
0

Po prostu użyj tego po wykonaniu mongoimportu

Zwróci liczbę zaimportowanych obiektów

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

zwróci liczbę obiektów.

HarishThangavel
źródło
0

posługiwać się :

mongoimport -d 'database_name' -c 'collection_name' --type csv --headerline --file filepath/file_name.csv
Tavleen
źródło
0

mongoimport -d test -c test --typ csv - plik PróbkaCSVFile_119kb.csv - nagłówek

sprawdź dane kolekcji: -

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
źródło
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
źródło
0

O dziwo nikt nie wspomniał o --urifladze:

mongoimport --uri connectionString -c questions --type csv --file questions.csv --headerline 
Alex Ershov
źródło
0

Udostępnianie dla przyszłych czytelników:

W naszym przypadku musieliśmy dodać hostparametr, aby działał

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
źródło
0

Moim wymaganiem było zaimportowanie .csv (with no headline)zdalnej MongoDBinstancji. Dla mongoimport v3.0.7poniższego polecenia działało dla mnie:

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

Na przykład:

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

Poniżej zrzut ekranu, jak to wygląda po imporcie:

wprowadź opis zdjęcia tutaj

gdzie namei emailsą kolumny w .csvpliku.

Arpit Aggarwal
źródło
0

Biorąc pod uwagę .csvplik, który mam, który ma tylko jedną kolumnę bez nagłówka , poniższe polecenie działało dla mnie:

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

gdzie nazwa-pola odnosi się do nazwy nagłówka kolumny w .csvpliku.

Arpit Aggarwal
źródło
0

Skopiuj plik .csv do katalogu / usr / local / bin lub innego folderu, w którym znajduje się mondodb

Guneet Singh
źródło