วิธีใช้ mongoimport เพื่อนำเข้า csv


190

กำลังพยายามนำเข้า CSV ด้วยข้อมูลติดต่อ:

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

การรันสิ่งนี้ดูเหมือนจะไม่เพิ่มเอกสารใด ๆ ในฐานข้อมูล:

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

Trace พูดว่าimported 1 objectsแต่การยิง Mongo shell และการรันdb.things.find()ไม่แสดงเอกสารใหม่

ฉันกำลังคิดถึงอะไร


1
คุณลองuse mydbมาก่อนdb.things.find()หรือไม่
Kyle Wild

1
ใช่ - ยังคงแสดงเอกสารอื่นที่อยู่ใน db.things
Joe

สำหรับการนำเข้า CSV ลงในชุดของเอกสารที่ซ้อนกัน (พร้อมเอกสารย่อยหรืออาร์เรย์) คุณสามารถใช้ AWK - joyofdata.de/blog/import-csv-into-mongodb-with-awk-json
Raffael

คำตอบ:


244

ตัวอย่างของคุณใช้ได้กับ MongoDB 1.6.3 และ 1.7.3 ตัวอย่างด้านล่างเป็น 1.7.3 คุณใช้ 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
ขอบคุณ! มันใช้งานได้สำหรับฉัน ฉันทำสิ่งเดียวกันมาก่อนยกเว้นการสร้าง CSV ในแบบที่คุณทำ พยายามอย่างนั้นและมันทำงานอย่างเหมาะสม ฉันสร้างไฟล์ต้นฉบับใน MS Excel ดังนั้นคาดเดาว่ามีปัญหากับการขึ้นบรรทัดใหม่ที่ท้ายบรรทัดแต่ละบรรทัด
Joe

ทำงานให้ฉันด้วย ฉันบันทึกไฟล์ด้วยบรรทัด LF ที่ลงท้ายด้วย OS X และทำงานได้
Khash

เป็นไปได้หรือไม่ที่จะนำเข้าบันทึกทั้งหมดจาก csv ไปยังวัตถุ 1 ชิ้นแทนที่จะเป็น 1 วัตถุต่อหนึ่งระเบียน?
Aniket Kapse

ใช่อยู่ห่างจาก Word เมื่อทำสิ่ง CSV ฉันมีปัญหาเดียวกัน ข้อบกพร่องใน Word และ mongoimport ด้วย :(
Matt Fletcher

2
เพื่อให้สามารถตรวจสอบความถูกต้องขณะนำเข้าคุณสามารถทำได้mongoimport -d db_name -c collection_name --type csv --file filename.csv --headerline --host hostname:portnumber --authenticationDatabase admin --username 'iamauser' --password 'pwd123'
blueskin

29

ฉันงงกับปัญหาที่คล้ายกันซึ่ง mongoimport ไม่ได้ให้ข้อผิดพลาดแก่ฉัน แต่จะรายงานการนำเข้า 0 รายการ ฉันได้บันทึกไฟล์ของฉันที่ไม่ทำงานโดยใช้รุ่น OSX Excel สำหรับ Mac 2011 โดยใช้ค่าเริ่มต้น "บันทึกเป็น .. " "xls เป็น csv" โดยไม่ระบุรูปแบบ "Windows Comma Separated (.csv)" โดยเฉพาะ หลังจากทำการค้นคว้าไซต์นี้และลองใช้รูปแบบ "บันทึกเป็นอีกครั้งโดยใช้" Windows Comma Separated (.csv) "รูปแบบ mongoimport ทำงานได้ดีฉันคิดว่า mongoimport คาดว่าจะมีอักขระขึ้นบรรทัดใหม่ในแต่ละบรรทัดและการส่งออก csv Mac Excel 2011 ที่เป็นค่าเริ่มต้น อักขระที่ท้ายของแต่ละบรรทัด


Excel เป็นสัตว์ประหลาดแปลก ๆ เมื่อทำการประมวลผลไฟล์ CSV ซึ่งรวมถึงการพยายามนำเข้า CSV ในฐานข้อมูลอื่น ๆ ไม่ใช่ปัญหาที่เกี่ยวข้องกับ Mongo อย่างเคร่งครัด ฉันขอแนะนำให้ใช้ Google ชีตเมื่อเล่นกับ CSV ได้ฟรีออนไลน์และอนุญาตให้นำเข้า / ส่งออก CSV และ TSV ที่จัดรูปแบบอย่างเหมาะสม
MacK

21

เราจำเป็นต้องดำเนินการคำสั่งต่อไปนี้:

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

-d เป็นชื่อฐานข้อมูล

-c เป็นชื่อคอลเล็กชัน

--headerline หากใช้ --type csv หรือ --type tsv ให้ใช้บรรทัดแรกเป็นชื่อฟิลด์ มิฉะนั้น mongoimport จะนำเข้าบรรทัดแรกเป็นเอกสารที่แตกต่าง

สำหรับข้อมูลเพิ่มเติม: mongoimport


6

คุณมักจะต้องตรวจสอบสิทธิ์หากคุณทำงานในสภาพแวดล้อมการผลิตแบบต่างๆ คุณสามารถใช้สิ่งนี้เพื่อรับรองความถูกต้องกับฐานข้อมูลที่ถูกต้องด้วยข้อมูลประจำตัวที่เหมาะสม

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

3

ตรวจสอบว่าคุณมีบรรทัดว่างที่ท้ายไฟล์มิฉะนั้นบรรทัดสุดท้ายจะถูกละเว้นใน mongoimport บางเวอร์ชัน


3

ฉันใช้สิ่งนี้กับเชลล์ mongoimport

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

type สามารถเลือก csv / tsv / json แต่ csv / tsv เท่านั้นที่สามารถใช้ได้ --headerline

คุณสามารถอ่านเพิ่มเติมเกี่ยวกับเอกสารอย่างเป็นทางการ


1

Robert Stewart ได้ตอบวิธีนำเข้าด้วย mongoimport แล้ว

ฉันแนะนำวิธีง่ายๆในการนำเข้า CSV อย่างหรูหราด้วยเครื่องมือMongoChef 3T (เวอร์ชัน 3.2 ขึ้นไป) อาจช่วยคนในอนาคต

  1. คุณเพียงแค่ต้องเลือกชุดสะสม
  2. เลือกไฟล์ที่จะนำเข้า
  3. คุณสามารถยกเลิกการเลือกข้อมูลที่จะนำเข้า นอกจากนี้ยังมีตัวเลือกมากมาย
  4. นำเข้าคอลเล็กชัน

ดูวิธีการนำเข้าวิดีโอ


1

ก่อนอื่นคุณควรออกมาจากmongoเชลล์แล้วดำเนินการmongoimportคำสั่งดังนี้:

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 มินิบาร์ --type csv --headerline - ไฟล์ '/Users/Aditya/Downloads/mstf.csv' Gurantaed ผลลัพธ์โดย Manoj Barik
8006819

1

คำตอบของ Robert Stewart นั้นยอดเยี่ยม

ฉันต้องการเพิ่มว่าคุณสามารถพิมพ์ฟิลด์ของคุณด้วย --columHaveTypes และ - ฟิลด์เช่นนี้:

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

(ระวังอย่าให้มีที่ว่างหลังเครื่องหมายจุลภาคระหว่างเขตข้อมูลของคุณ)

สำหรับประเภทอื่น ๆ ดูเอกสารได้ที่นี่: https://docs.mongodb.com/manual/reference/program/mongoimport/#cmdoption-mongoimport-columnshavetypes


1

สำหรับรุ่น 3.4 โปรดใช้ไวยากรณ์ต่อไปนี้:

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

หลังจาก 3 วันในที่สุดฉันก็ทำมันเอง ขอขอบคุณผู้ใช้ทุกคนที่สนับสนุนฉัน


มีการพิมพ์ผิด --headerline,
Ankit Kumar

1

เมื่อฉันพยายามนำเข้าไฟล์ CSV ฉันได้รับข้อผิดพลาด สิ่งที่ฉันทำ ก่อนอื่นฉันเปลี่ยนชื่อคอลัมน์ของบรรทัดส่วนหัวในอักษรตัวใหญ่และลบ "-" และเพิ่ม "_" หากจำเป็น จากนั้นพิมพ์คำสั่งด้านล่างเพื่อนำเข้า CSV ไปยัง Mongo

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

ป้อนคำอธิบายรูปภาพที่นี่


ทำงานเหมือน Charm! คำตอบที่กล่าวถึงข้างต้นนั้นสำหรับ MongoDB รุ่นเก่าที่ฉันคิดว่า
Raghav Sharma

0

C: \ wamp \ mongodb \ bin> mongoexport --db proj_mmm - ข้อเสนอการรวบรวม --csv --fieldFile ข้อเสนอ _fields.txt - ข้อเสนอที่หมด


0

เพียงใช้สิ่งนี้หลังจากเรียกใช้ mongoimport

มันจะส่งคืนจำนวนของวัตถุที่นำเข้า

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

จะคืนค่าจำนวนของวัตถุ



0

mongoimport -d ทดสอบ -c ทดสอบ - พิมพ์ csv - ตัวอย่างไฟล์ CSVVile_119kb.csv - ส่วนหัว

ตรวจสอบข้อมูลการเก็บรวบรวม: -

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

การแบ่งปันสำหรับผู้อ่านในอนาคต:

ในกรณีของเราเราจำเป็นต้องเพิ่มhostพารามิเตอร์เพื่อให้มันใช้งานได้

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

ความต้องการของฉันคือการนำเข้าอินสแตนซ์.csv (with no headline)ระยะไกล MongoDBสำหรับmongoimport v3.0.7ด้านล่างคำสั่งทำงานสำหรับฉัน:

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

ตัวอย่างเช่น:

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

ด้านล่างนี้เป็นภาพหน้าจอที่มีลักษณะเป็นอย่างไรหลังจากนำเข้า:

ป้อนคำอธิบายรูปภาพที่นี่

โดยที่nameและemailเป็นคอลัมน์ใน.csvไฟล์


0

ได้รับ.csvไฟล์ฉันมีซึ่งมีเพียงหนึ่งคอลัมน์ที่มีไม่มีส่วนหัวด้านล่างคำสั่งทำงานสำหรับฉัน:

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

โดยที่field-name อ้างถึงชื่อส่วนหัวของคอลัมน์ใน.csvไฟล์


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.