Cara menggunakan mongoimport untuk mengimpor csv

190

Mencoba mengimpor CSV dengan informasi kontak:

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

Menjalankan ini sepertinya tidak menambahkan dokumen apa pun ke database:

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

Kata Trace imported 1 objects, tetapi menembakkan peluru Mongo dan berlaridb.things.find() tidak menunjukkan dokumen baru.

Apa yang saya lewatkan?

Joe
sumber
1
Apakah kamu pernah mencoba use mydbsebelumnya db.things.find()?
Kyle Wild
1
Ya - masih menunjukkan dokumen lain yang ada di db.things
Joe
untuk mengimpor CSV ke dalam kumpulan dokumen bersarang (dengan sub-dokumen atau array), Anda dapat menggunakan AWK - joyofdata.de/blog/import-csv-into-mongodb-with-awk-json
Raffael

Jawaban:

244

Contoh Anda berhasil untuk saya dengan MongoDB 1.6.3 dan 1.7.3. Contoh di bawah ini untuk 1.7.3. Apakah Anda menggunakan versi MongoDB yang lebih lama?

$ 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
sumber
7
Terima kasih! Ini bekerja untuk saya. Saya melakukan hal yang sama sebelumnya dengan pengecualian membuat CSV seperti yang Anda lakukan. Sudah mencobanya dan itu berhasil. Saya membuat file asli di MS Excel, jadi menebak ada masalah dengan baris baru di akhir setiap baris.
Joe
Bekerja untuk saya juga. Saya menyimpan file dengan garis LF yang berakhir pada OS X dan berhasil.
Khash
Apakah mungkin untuk mengimpor semua catatan dari csv ke hanya 1 objek, bukan 1 objek per catatan?
Aniket Kapse
Ya, menjauhlah dari Word saat melakukan hal-hal CSV. Saya memiliki masalah yang sama. Bug di Word dan di mongoimport juga :(
Matt Fletcher
2
Untuk dapat mengautentikasi saat mengimpor, Anda dapat melakukannyamongoimport -d db_name -c collection_name --type csv --file filename.csv --headerline --host hostname:portnumber --authenticationDatabase admin --username 'iamauser' --password 'pwd123'
blueskin
29

Saya bingung dengan masalah yang sama di mana mongoimport tidak memberi saya kesalahan tetapi akan melaporkan mengimpor 0 catatan. Saya telah menyimpan file saya yang tidak berfungsi menggunakan versi OSX Excel untuk Mac 2011 menggunakan default "Save as .." "xls as csv" tanpa menentukan secara spesifik format "Windows Comma Separated (.csv)". Setelah meneliti situs ini dan mencoba format "Save As again menggunakan" Windows Comma Separated (.csv) ", mongoimport bekerja dengan baik. Saya pikir mongoimport mengharapkan karakter baris baru di setiap baris dan ekspor standar csv Mac Excel 2011 tidak menyediakan karakter di akhir setiap baris.

pengguna2514493
sumber
Excel memang binatang yang aneh ketika memproses file CSV, yang juga termasuk mencoba mengimpor CSV di database lain, itu tidak sepenuhnya masalah yang terkait dengan mongo. Saya akan menyarankan untuk menggunakan Google Sheets ketika bermain-main dengan CSV, gratis, online dan memungkinkan untuk mengimpor / mengekspor CSV dan TSV yang diformat dengan benar juga
MacK
21

Kita perlu menjalankan perintah berikut:

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

-d adalah nama basis data

-c adalah nama koleksi

--headerline Jika menggunakan --type csv atau --type tsv, gunakan baris pertama sebagai nama bidang. Jika tidak, mongoimport akan mengimpor baris pertama sebagai dokumen yang berbeda.

Untuk informasi lebih lanjut: mongoimport

d.danailov
sumber
6

Anda kemungkinan besar perlu mengautentikasi jika Anda bekerja di lingkungan jenis produksi. Anda dapat menggunakan sesuatu seperti ini untuk mengautentikasi terhadap database yang benar dengan kredensial yang sesuai.

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

Pastikan Anda memiliki baris kosong di akhir file, jika tidak, baris terakhir akan diabaikan pada beberapa versi mongoimport

Maxence
sumber
3

Saya menggunakan ini pada shell mongoimport

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

tipe dapat memilih csv / tsv / json Tetapi hanya csv / tsv yang dapat digunakan --headerline

Anda dapat membaca lebih lanjut di dokumen resmi .

R-Ling Chou
sumber
1

Robert Stewart telah menjawab untuk cara mengimpor dengan mongoimport.

Saya menyarankan cara mudah untuk mengimpor CSV secara elegan dengan 3T MongoChef Tool (versi 3.2+). Mungkin bisa membantu seseorang di masa depan.

  1. Anda hanya perlu memilih koleksi
  2. Pilih file yang akan diimpor
  3. Anda juga dapat membatalkan pilihan data yang akan diimpor. Juga ada banyak pilihan.
  4. Koleksi yang diimpor

Lihat cara mengimpor video

Somnath Muluk
sumber
1

Pertama, Anda harus keluar dari mongoshell dan kemudian jalankan mongoimportperintah seperti ini:

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$
pengguna8006819
sumber
$ mongoimport -d marketdata -c minibar --type csv --headerline --file '/Users/Aditya/Downloads/mstf.csv' Dijamin Hasil Dialami oleh Manoj Barik
user8006819
1

Jawaban Robert Stewart luar biasa.

Saya ingin menambahkan bahwa Anda juga dapat mengetik bidang Anda dengan --columHaveTypes dan --fields seperti ini:

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

(Hati-hati untuk tidak memiliki ruang setelah koma antara bidang Anda)

Untuk jenis lain, lihat dokumen di sini: https://docs.mongodb.com/manual/reference/program/mongoimport/#cmdoption-mongoimport-columnshavetypes

Thomas Pierre
sumber
1

Untuk versi 3.4, silakan gunakan sintaks berikut:

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

Setelah 3 hari, saya akhirnya membuatnya sendiri. Terima kasih untuk semua pengguna yang mendukung saya.

Sreshta Tric
sumber
ada kesalahan ketik, - headerline,
Ankit Kumar
1

Ketika saya mencoba mengimpor file CSV, saya mendapatkan kesalahan. Apa yang telah aku lakukan. Pertama saya mengubah nama kolom baris header dalam huruf kapital dan menghapus "-" dan menambahkan "_" jika perlu. Kemudian, perintah Typed below untuk mengimpor CSV ke dalam mongo

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

masukkan deskripsi gambar di sini

Pooja Khatri
sumber
Bekerja seperti Mantra! Jawaban yang disebutkan di atas adalah untuk versi MongoDB yang lebih lama.
Raghav Sharma
0

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

Bhaskar
sumber
0

Cukup gunakan ini setelah menjalankan mongoimport

Ini akan mengembalikan jumlah objek yang diimpor

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

akan mengembalikan jumlah objek.

HarishThangavel
sumber
0

gunakan:

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

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

periksa data pengumpulan: -

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

Anehnya tidak ada yang disebutkan --uribendera:

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

Berbagi untuk pembaca masa depan:

Dalam kasus kami, kami perlu menambahkan hostparameter untuk membuatnya berfungsi

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

Persyaratan saya adalah mengimpor instance .csv (with no headline)ke remote MongoDB. Untuk mongoimport v3.0.7perintah di bawah ini bekerja untuk saya:

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

Sebagai contoh:

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

Di bawah ini adalah screenshot tampilannya setelah impor:

masukkan deskripsi gambar di sini

di mana namedan emailadalah kolom dalam .csvfile.

Arpit Aggarwal
sumber
0

Diberikan .csvfile yang saya miliki yang hanya memiliki satu kolom tanpa Header , perintah di bawah ini berfungsi untuk saya:

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

di mana nama-bidang mengacu pada nama Header dari kolom dalam .csvfile.

Arpit Aggarwal
sumber
0

Pastikan untuk menyalin file .csv ke / usr / local / bin atau folder apa pun yang digunakan mondodb Anda

Guneet Singh
sumber