Impor file json

173

Saya memiliki file json yang terdiri dari sekitar 2000 catatan. Setiap catatan yang akan terkait dengan dokumen dalam database mongo diformat sebagai berikut:

{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"}},

Setiap catatan berada pada satu baris dalam file JSON, dan satu-satunya jeda baris adalah di akhir setiap catatan. Oleh karena itu, setiap baris dalam dokumen dimulai dengan "{jobID:" ... Saya mencoba mengimpor ini ke database mongo menggunakan perintah berikut:

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

Namun, saya mendapatkan kesalahan berikut:

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

Saya tidak tahu apa masalahnya. Adakah yang bisa merekomendasikan solusi?

amber4478
sumber

Jawaban:

301

Saya dapat memperbaiki kesalahan menggunakan kueri berikut:

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

Semoga ini bermanfaat bagi seseorang.

amber4478
sumber
28
--jsonArraymenjadi tiketnya, ya?
Dudo
4
Bentuk singkat ini mongoimport -d <database> -c <collection> --jsonArray -f <filename>.json.
Adam Faryna
1
kadang-kadang pengguna / kata sandi diperlukanmongoimport --db dbName --collection collectionName --file fileName.json --jsonArray -u ser -p password
Diego Andrés Díaz Espinoza
Menambahkan ke komentar @ DiegoAndrésDíazEspinoza, bahwa dalam kasus saya, saya mendapat kesalahan "tidak dapat mengautentikasi menggunakan mekanisme 'SCRAM-SHA-1'". Jadi, setelah pencarian, saya menemukan bahwa kata kunci tersebut tidak ada authenticationDatabasesebagaimana disebutkan dalam jawaban stackoverflow.com/a/58067928/6791222 .
Feroz Khan
61

coba ini,

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

Contoh,

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

Masalahnya adalah karena format tanggal Anda.

Saya menggunakan JSON yang sama dengan tanggal modifikasi seperti di bawah ini dan itu berhasil

{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"}}

semoga ini membantu

Srivatsa N
sumber
Saya memiliki kesalahan yang sama seperti pada pertanyaan ... Apakah periksa impor ini?
Denis Nikanorov
Saya menyesuaikan tanggal seperti yang Anda sarankan dan itu menghilangkan kesalahan khusus itu. Namun, sekarang saya mendapatkan yang baru. Ini kesalahan baru:
amber4478
Bisakah Anda menempelkan JSON baru dan versi Mongo mana Anda?
Srivatsa N
Saya dapat memperbaiki kesalahan dengan menambahkan --jsonArray ke akhir permintaan.
amber4478
Perlu digunakan di ""sekitar .json, jika mengandung nama folder memiliki spasi di dalamnya. Dijawab oleh Abhi di bawah Untuk Misalnya Ini tidak akan berfungsi, perlu menambahkan ""ke lokasi file json untuk mengimpornya. D:\>mongoimport --db testimport --collection small_zip < D:\Dev\test test\small_zips.json The system cannot find the file specified. Ini berfungsi 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

Menggunakan mongoimport, Anda dapat mencapai hal yang sama

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

dimana,

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

--drop drop koleksi jika sudah ada.

KARTHIKEYAN.A
sumber
20

menghibur:

mongoimport -d dbName -c collectionName dataFile.js 
Andrey
sumber
6

Saya telah menggunakan perintah di bawah ini untuk mengekspor DB

mongodump --db database_name --collection collection_name

dan perintah di bawah ini berfungsi untuk saya mengimpor DB

mongorestore --db database_name path_to_bson_file
Ravi Hirani
sumber
6

Sintaks Anda muncul sepenuhnya benar di:

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

Pastikan Anda berada di folder yang benar atau berikan path lengkap.

Robert Grutza
sumber
3

Jalankan perintah impor di terminal lain. (tidak di dalam kulit mongo.)

mongoimport --db test --collection user --drop --file ~/downloads/user.json
Nija I Pillai
sumber
3

Di windows Anda dapat menggunakan Command Prompcmd Anda cmd, di Ubuntu Anda dapat menggunakan Anda terminaldengan mengetikkan perintah berikut:

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

kemudian ketika Anda membuka shell mongo Anda, Anda akan menemukan untuk memeriksa database_name Anda saat menjalankan perintah ini:

show databases
Noha Salah
sumber
2

Perintah ini berfungsi di mana tidak ada koleksi yang ditentukan.

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

Mongo shell setelah menjalankan perintah

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
Abhi
sumber
1

Saya mencoba sesuatu seperti ini dan ternyata berfungsi:

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

Ini berfungsi dengan saya ketika db dengan usrname dan kata sandi

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

db tanpa kata sandi nama pengguna, harap hapus -u my_user -p my_pass

Sampel saya json

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

Larutan:-

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

Contoh:-

Tempatkan file Anda di folder admin: -

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

Jalankan perintah ini di teminal Anda: -

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

Keluaran:-

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

Untuk tautan lainnya

Parveen Chauhan
sumber
1
  1. Cukup salin jalur file json seperti contoh "C: \ persons.json"
  2. pergi ke C: \ Program Files \ MongoDB \ Server \ 4.2 \ bin
  3. buka cmd pada folder mongodb bin itu dan jalankan perintah ini

mongoimport --jsonArray --db dbname - collection collectionName - file FilePath

contoh mongoimport --jsonArray --db learnmongo --collection persons --file C: \ persons.json

Hrishikesh Baidya
sumber
0

Jika Anda mencoba untuk mengekspor koleksi tes ini:

> 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")}

dengan mongoexport (tanggal pertama dibuat dengan Date(...)dan yang kedua dibuat dengan new Date(...)(jika penggunaan ISODate(...)akan sama dengan di baris kedua)) sehingga output mongoexport akan terlihat seperti ini:

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

Jadi Anda harus menggunakan notasi yang sama, karena JSON yang ketat tidak memiliki tipe Date( <date> ).

JSON Anda juga tidak valid: semua nama bidang harus dilampirkan dalam tanda kutip ganda, tetapi mongoimport berfungsi dengan baik tanpa mereka.

Anda dapat menemukan informasi tambahan dalam dokumentasi mongodb dan di sini .

Denis Nikanorov
sumber
Saya menyesuaikan tanggal seperti yang Anda sarankan dan itu menghilangkan kesalahan khusus itu. Namun, sekarang saya mendapatkan yang baru. Berikut adalah kesalahan baru: 'Sat 2 Maret 15:22:07 pengecualian: Representasi BSON dari JSON yang disediakan terlalu besar: Gagal mengurai string JSON dekat: data: "1949 Sat 2 Maret 15:22:07 Sat 2 15:22 : 07 diimpor 0 objek Sabtu 2 15:22:07 ERROR: mengalami 34763 kesalahan '
amber4478
Saya pikir ini kesalahan lain yang ditarik ke lapangansizeT:{data: "1949..."}}
Denis Nikanorov
0

Agak terlambat untuk jawaban yang mungkin, mungkin bisa membantu orang baru. Jika Anda memiliki beberapa instance database:

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

Dengan asumsi kredensial diperlukan, jika tidak hapus opsi ini.

coolmego
sumber
0

Jumlah jawaban telah diberikan meskipun saya ingin memberikan perintah saya. Dulu saya sering. Mungkin membantu seseorang.

mongoimport original.json -d databaseName -c yourcollectionName --jsonArray --drop
Pramod Kharade
sumber