Mongoimport ของไฟล์ json


173

ฉันมีไฟล์ json ซึ่งประกอบด้วยบันทึกประมาณ 2,000 รายการ แต่ละเร็กคอร์ดที่จะสอดคล้องกับเอกสารในฐานข้อมูล mongo ถูกจัดรูปแบบดังนี้:

{jobID:"2597401",
account:"XXXXX",
user:"YYYYY",
pkgT:{"pgi/7.2-5":{libA:["libpgc.so"],flavor:["default"]}},     
startEpoch:"1338497979",
runTime:"1022",
execType:"user:binary",
exec:"/share/home/01482/XXXXX/appker/ranger/NPB3.3.1/NPB3.3-MPI/bin/ft.D.64",
numNodes:"4",
sha1:"5a79879235aa31b6a46e73b43879428e2a175db5",
execEpoch:1336766742,
execModify: new Date("Fri May 11 15:05:42 2012"),
startTime: new Date("Thu May 31 15:59:39 2012"),
numCores:"64",
sizeT:{bss:"1881400168",text:"239574",data:"22504"}},

แต่ละเร็กคอร์ดอยู่บนบรรทัดเดียวในไฟล์ JSON และการขึ้นบรรทัดใหม่เพียงครั้งเดียวจะสิ้นสุดที่ทุกเร็กคอร์ด ดังนั้นแต่ละบรรทัดในเอกสารเริ่มต้นด้วย "{jobID:" ... ฉันกำลังพยายามนำเข้าสิ่งเหล่านี้ลงในฐานข้อมูล mongo โดยใช้คำสั่งต่อไปนี้:

mongoimport --db dbName --collection collectionName --file fileName.json

อย่างไรก็ตามฉันได้รับข้อผิดพลาดต่อไปนี้:

Sat Mar  2 01:26:12 Assertion: 10340:Failure parsing JSON string near: ,execModif
0x10059f12b 0x100562d5c 0x100562e9c 0x10025eb98 0x10000e643 0x100010b60 0x10055c4cc 0x1000014b7    
0x100001454 
 0   mongoimport                         0x000000010059f12b _ZN5mongo15printStackTraceERSo + 43
 1   mongoimport                         0x0000000100562d5c _ZN5mongo11msgassertedEiPKc + 204
 2   mongoimport                         0x0000000100562e9c _ZN5mongo11msgassertedEiRKSs + 12
 3   mongoimport                         0x000000010025eb98 _ZN5mongo8fromjsonEPKcPi + 1576
 4   mongoimport                         0x000000010000e643          
                                         _ZN6Import8parseRowEPSiRN5mongo7BSONObjERi + 2739
 5   mongoimport                         0x0000000100010b60 _ZN6Import3runEv + 7376
 6   mongoimport                         0x000000010055c4cc _ZN5mongo4Tool4mainEiPPc + 5436
 7   mongoimport                         0x00000001000014b7 main + 55
 8   mongoimport                         0x0000000100001454 start + 52
Sat Mar  2 01:26:12 exception:BSON representation of supplied JSON is too large: Failure parsing    
    JSON string near: ,execModif
Sat Mar  2 01:26:12 
Sat Mar  2 01:26:12 imported 0 objects
Sat Mar  2 01:26:12 ERROR: encountered 1941 errors

ฉันไม่ทราบว่าปัญหาคืออะไร ใครบางคนสามารถแนะนำวิธีแก้ปัญหาได้?

คำตอบ:


301

ฉันสามารถแก้ไขข้อผิดพลาดโดยใช้แบบสอบถามต่อไปนี้:

mongoimport --db dbName --collection collectionName --file fileName.json --jsonArray

หวังว่านี่จะเป็นประโยชน์กับใครบางคน


28
--jsonArrayเป็นตั๋วใช่มั้ย
Dudo

4
mongoimport -d <database> -c <collection> --jsonArray -f <filename>.jsonแบบฟอร์มสั้นนี้
Adam Faryna

1
บางครั้งจำเป็นต้องมีผู้ใช้ / รหัสผ่านmongoimport --db dbName --collection collectionName --file fileName.json --jsonArray -u ser -p password
Diego

การเพิ่มความคิดเห็น @ DiegoAndrésDíazEspinozaว่าในกรณีของฉันฉันมีข้อผิดพลาด "ไม่สามารถตรวจสอบสิทธิ์โดยใช้กลไก 'SCRAM-SHA-1' ดังนั้นหลังจากการค้นหาผมพบว่ามันจะหายไปคำหลักauthenticationDatabaseที่กล่าวไว้ในคำตอบstackoverflow.com/a/58067928/6791222
Feroz Khan

61

ลองนี้

mongoimport --db dbName --collection collectionName <fileName.json

ตัวอย่าง,

mongoimport --db foo --collection myCollections < /Users/file.json
connected to: *.*.*.*
Sat Mar  2 15:01:08 imported 11 objects

ปัญหาเป็นเพราะรูปแบบวันที่ของคุณ

ฉันใช้ JSON เดียวกันกับวันที่แก้ไขด้านล่างและใช้งานได้

{jobID:"2597401",
account:"XXXXX",
user:"YYYYY",
pkgT:{"pgi/7.2-5":{libA:["libpgc.so"],flavor:["default"]}},     
startEpoch:"1338497979",
runTime:"1022",
execType:"user:binary",
exec:"/share/home/01482/XXXXX/appker/ranger/NPB3.3.1/NPB3.3-MPI/bin/ft.D.64",
numNodes:"4",
sha1:"5a79879235aa31b6a46e73b43879428e2a175db5",
execEpoch:1336766742,
execModify:{"$date" : 1343779200000},
startTime:{"$date" : 1343779200000},
numCores:"64",
sizeT:{bss:"1881400168",text:"239574",data:"22504"}}

หวังว่านี่จะช่วยได้


ฉันมีข้อผิดพลาดเหมือนกับในคำถาม ... ตรวจสอบการนำเข้านี้หรือไม่
Denis Nikanorov

ฉันปรับวันที่ตามที่คุณแนะนำและนั่นก็กำจัดข้อผิดพลาดนั้นโดยเฉพาะ อย่างไรก็ตามตอนนี้ฉันได้รับใหม่ นี่เป็นข้อผิดพลาดใหม่:
amber4478

คุณสามารถวาง JSON ใหม่และ Mongo เวอร์ชันใดได้บ้าง
Srivatsa N

ฉันสามารถแก้ไขข้อผิดพลาดได้โดยการเพิ่ม --jsonArray ไปยังจุดสิ้นสุดของข้อความค้นหา
amber4478

จำเป็นต้องใช้""รอบ ๆ.jsonถ้ามันมีชื่อโฟลเดอร์ที่มีช่องว่าง ตอบโดย Abhi ด้านล่าง สำหรับเช่น นี้จะไม่ทำงานต้องเพิ่ม""ไปยังตำแหน่งไฟล์ json เพื่อนำเข้า D:\>mongoimport --db testimport --collection small_zip < D:\Dev\test test\small_zips.json The system cannot find the file specified. งานนี้ D:\>mongoimport --db testimport --collection small_zip < "D:\Dev\test test\small_zips.json" 2016-04-17T18:32:34.328+0800 connected to: localhost 2016-04-17T18:32:34.610+0800 imported 200 documents
Abhijeet

22

ใช้mongoimportคุณสามารถบรรลุเหมือนกัน

mongoimport --db test --collection user --drop --file ~/downloads/user.json

ที่ไหน

test - Database name
user - collection name
user.json - dataset file

--drop คือวางคอลเลกชันถ้ามีอยู่แล้ว



6

ฉันใช้คำสั่งด้านล่างเพื่อส่งออกฐานข้อมูล

mongodump --db database_name --collection collection_name

และคำสั่งด้านล่างทำงานให้ฉันเพื่อนำเข้าฐานข้อมูล

mongorestore --db database_name path_to_bson_file

6

ไวยากรณ์ของคุณปรากฏอย่างถูกต้องใน:

mongoimport --db dbName --collection collectionName --file fileName.json

ตรวจสอบให้แน่ใจว่าคุณอยู่ในโฟลเดอร์ที่ถูกต้องหรือระบุเส้นทางแบบเต็ม


3

รันคำสั่ง import ในเทอร์มินัลอื่น (ไม่ใช่ภายในเปลือก Mongo)

mongoimport --db test --collection user --drop --file ~/downloads/user.json

3

ใน windows คุณสามารถใช้ Command Prompcmd ของคุณ cmdได้ใน Ubuntu คุณสามารถใช้terminalคำสั่งต่อไปนี้:

mongoimport  -d  your_database_name  -c  your_collection_name  /path_to_json_file/json_file_name.json

จากนั้นเมื่อคุณเปิด mongo shell คุณจะพบว่าตรวจสอบ database_name ของคุณเมื่อรันคำสั่งนี้:

show databases

2

คำสั่งนี้ทำงานที่ไม่ได้ระบุการรวบรวม

mongoimport --db zips "\MongoDB 2.6 Standard\mongodb\zips.json"

Mongo shell หลังจากรันคำสั่ง

connected to: 127.0.0.1
no collection specified!
using filename 'zips' as collection.
2014-09-16T13:56:07.147-0400 check 9 29353
2014-09-16T13:56:07.148-0400 imported 29353 objects

1

ฉันลองอะไรเช่นนี้และใช้งานได้จริง:

mongoimport --db dbName --file D:\KKK\NNN\100YWeatherSmall.data.json

1

สิ่งนี้ใช้ได้กับฉันเมื่อ db กับ usrname และรหัสผ่าน

mongoimport --db YOUR_DB --collection MyCollection --file /your_path/my_json_file.json -u my_user -p my_pass

db โดยไม่มีรหัสผ่านชื่อผู้ใช้โปรดลบออก -u my_user -p my_pass

ตัวอย่างของฉัน json

{ 
    "_id" : ObjectId("5d11c815eb946a412ecd677d"), 
    "empid" : NumberInt(1), 
    "name" : "Rahul"
}
{ 
    "_id" : ObjectId("5d11c815eb946a412ecd677e"), 
    "empid" : NumberInt(2), 
    "name" : "Rahul"
}

1

สารละลาย:-

mongoimport --db databaseName --collection tableName --file filepath.json

ตัวอย่าง:-

วางไฟล์ของคุณในโฟลเดอร์ผู้ดูแลระบบ: -

C:\Users\admin\tourdb\places.json

เรียกใช้คำสั่งนี้บน teminal ของคุณ: -

mongoimport --db tourdb --collection places --file ~/tourdb/places.json

เอาท์พุท: -

admin@admin-PC MINGW64 /
$ mongoimport --db tourdb --collection places --file ~/tourdb/places.json
2019-08-26T14:30:09.350+0530 connected to: localhost
2019-08-26T14:30:09.447+0530 imported 10 documents

สำหรับลิงค์เพิ่มเติม


1
  1. เพียงคัดลอกพา ธ ของไฟล์ json เช่นตัวอย่าง "C: \ person.json"
  2. ไปที่ C: \ Program Files \ MongoDB \ Server \ 4.2 \ bin
  3. เปิด cmd บนโฟลเดอร์ mongodb bin และเรียกใช้คำสั่งนี้

mongoimport --jsonArray --db dbname - collection collectionName - ไฟล์ FilePath

ตัวอย่างmongoimport --jsonArray --db learnmongo - ผู้ที่ถูกรวบรวม - ไฟล์ C: \ person.json


0

หากคุณพยายามที่จะส่งออกคอลเลกชันทดสอบนี้:

> db.test.find()
{ "_id" : ObjectId("5131c2bbfcb94ddb2549d501"), "field" : "Sat Mar 02 2013 13:13:31 GMT+0400"}
{"_id" : ObjectId("5131c2d8fcb94ddb2549d502"), "field" : ISODate("2012-05-31T11:59:39Z")}

ด้วย mongoexport (วันแรกที่สร้างด้วยDate(...)และวันที่สองที่สร้างด้วยnew Date(...)(หากการใช้งานISODate(...)จะเหมือนกันในบรรทัดที่สอง)) ดังนั้น mongoexport จะมีลักษณะเช่นนี้:

{ "_id" : { "$oid" : "5131c2bbfcb94ddb2549d501" }, "field" : "Sat Mar 02 2013 13:13:31 GMT+0400" }
{ "_id" : { "$oid" : "5131c2d8fcb94ddb2549d502" }, "field" : { "$date" : 1338465579000 } }

ดังนั้นคุณควรใช้สัญกรณ์เดียวกันเพราะเข้มงวด JSON Date( <date> )ไม่ได้มีประเภท

ด้วย JSON ของคุณไม่ถูกต้อง: ชื่อฟิลด์ทั้งหมดต้องอยู่ในเครื่องหมายคำพูดคู่ แต่ mongoimport ทำงานได้ดีหากไม่มี

คุณสามารถหาข้อมูลเพิ่มเติมใน MongoDB เอกสารและที่นี่


ฉันปรับวันที่ตามที่คุณแนะนำและนั่นก็กำจัดข้อผิดพลาดนั้นโดยเฉพาะ อย่างไรก็ตามตอนนี้ฉันได้รับใหม่ นี่เป็นข้อผิดพลาดใหม่: 'Sat Mar 2 15:22:07 ยกเว้น: การแสดง BSON ของ JSON ที่ให้มามีขนาดใหญ่เกินไป: ความล้มเหลวในการวิเคราะห์สตริง JSON ใกล้: data: "1949 Sat Mar 2 15:22:07 Sat Mar 2 15:22 : 07 นำเข้า 0 วัตถุเสาร์ที่ 2 มี.ค. 15:22:07 ข้อผิดพลาด: พบข้อผิดพลาด
34763

ฉันคิดว่ามันเป็นข้อผิดพลาดอีกอย่างหนึ่งที่ถูกปรับลงในฟิลด์sizeT:{data: "1949..."}}
เดนิส Nikanorov

0

สายไปซักหน่อยสำหรับคำตอบที่น่าจะเป็นอาจช่วยคนใหม่ได้ ในกรณีที่คุณมีฐานข้อมูลหลายอินสแตนซ์:

mongoimport --host <host_name>:<host_port> --db <database_name> --collection <collection_name>  --file <path_to_dump_file> -u <my_user> -p <my_pass>

สมมติว่าจำเป็นต้องใช้ข้อมูลรับรองมิฉะนั้นให้ลบตัวเลือกนี้


0

จำนวนคำตอบที่ได้รับแม้ว่าฉันต้องการที่จะให้คำสั่งของฉัน ฉันเคยไปบ่อย มันอาจช่วยให้ใครบางคน

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