Json dosyasının Mongoimport'u


173

Yaklaşık 2000 kayıttan oluşan bir json dosyam var. Moğol veritabanındaki bir belgeye karşılık gelecek her kayıt aşağıdaki gibi biçimlendirilir:

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

Her kayıt JSON dosyasındaki tek bir satırdadır ve tek satır sonları her kaydın sonundadır. Bu nedenle, belgedeki her satır "{jobID:" ile başlar ... Ben aşağıdaki komutu kullanarak bunları bir mongo veritabanına almaya çalışıyorum:

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

Ancak, aşağıdaki hatayı alıyorum:

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

Sorunun ne olduğunu bilmiyorum. Birisi bir çözüm önerebilir mi?

Yanıtlar:


302

Aşağıdaki sorguyu kullanarak hatayı düzeltebildim:

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

Umarım bu birisi için yararlıdır.


28
--jsonArraybilet olmak, değil mi?
Dudo

4
Bunun kısa biçimi mongoimport -d <database> -c <collection> --jsonArray -f <filename>.json.
Adam Faryna

1
bazen kullanıcı / şifre gerekirmongoimport --db dbName --collection collectionName --file fileName.json --jsonArray -u ser -p password
Diego Andrés Díaz Espinoza

@ DiegoAndrésDíazEspinoza yorumuna ek olarak, benim durumumda "SCRAM-SHA-1 mekanizması kullanılarak kimlik doğrulaması yapılamıyor" hatası aldım. Bu nedenle, bir aramadan sonra, stackoverflow.com/a/58067928/6791222authenticationDatabase yanıtında belirtildiği gibi anahtar kelimeyi eksik buldum .
Feroz Khan

61

bunu dene,

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

Misal,

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

Sorun tarih biçiminizden kaynaklanıyor.

Aşağıdaki gibi değiştirilmiş tarih ile aynı JSON kullandım ve çalıştı

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

Bu yardımcı olur umarım


Sorudakiyle aynı hatayla karşılaştım ... Bu içe aktarmayı kontrol ettiniz mi?
Denis Nikanorov

Tarihleri ​​önerdiğiniz gibi ayarladım ve bu hatadan kurtuldum. Ancak, şimdi yeni bir tane alıyorum. İşte yeni hata:
amber4478

Yeni JSON'u ve hangi Moğol versiyonunu yapıştırabilir misiniz?
Srivatsa N

Sorgunun sonuna --jsonArray ekleyerek hatayı düzeltmeyi başardım.
amber4478

Klasör adı içeriyorsa, ""çevresinde .jsonboşluklar varsa kullanmanız gerekir. Aşağıdaki Abhi tarafından cevaplanmıştır Eg için Bu işe yaramaz, ""içe aktarmak için json dosya konumuna eklemeniz gerekir. D:\>mongoimport --db testimport --collection small_zip < D:\Dev\test test\small_zips.json The system cannot find the file specified. Bu çalışır 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 kullanarak aynı başarıyı elde edebilirsiniz.

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

nerede,

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

--drop zaten varsa koleksiyonu bırakın.


20

konsol:

mongoimport -d dbName -c collectionName dataFile.js 

6

Ben ihracat DB için aşağıdaki komutu kullandım

mongodump --db database_name --collection collection_name

ve aşağıdaki komut DB ithal etmek için çalıştı

mongorestore --db database_name path_to_bson_file

6

Sözdiziminiz şu dillerde tamamen doğru görünüyor:

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

Doğru klasörde olduğunuzdan veya tam yolu sağladığınızdan emin olun.


3

Başka bir terminalde import komutunu çalıştırın. (mongo kabuğunun içinde değil.)

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

3

Windows'da Komut İstemi'ni kullanabilirsiniz cmd, Ubuntu'da terminalaşağıdaki komutu yazarak kullanabilirsiniz :

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

daha sonra mongo kabuğunuzu açtığınızda, bu komutu çalıştırırken database_name'inizi kontrol edin:

show databases

2

Bu komut hiçbir koleksiyon belirtilmediğinde çalışır.

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

Komutu uyguladıktan sonra Mongo kabuğu

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

Böyle bir şey denedim ve gerçekten işe yarıyor:

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

1

Kullanıcı adı ve şifre ile db olduğunda bu benimle çalışır

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

kullanıcı adı şifresi olmadan db lütfen kaldır -u my_user -p my_pass

Benim örnek json

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

1

Çözüm:-

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

Misal:-

Dosyanızı yönetici klasörüne yerleştirin: -

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

Bu komutu teminalinizde çalıştırın: -

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

Çıktı:-

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

Daha fazla bağlantı için


1
  1. Sadece "C: \ persons.json" gibi json dosyasının yolunu kopyalayın
  2. C: \ Program Files \ MongoDB \ Server \ 4.2 \ bin klasörüne gidin
  3. o mongodb bin klasöründe cmd'yi açın ve bu komutu çalıştırın

mongoimport --jsonArray --db dbname - toplama koleksiyonuAdı - dosya FilePath

örnek mongoimport --jsonArray --db learnmongo - toplama kişileri --file C: \ persons.json


0

Bu test koleksiyonunu dışa aktarmaya çalışırsanız:

> 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 ile (ilk oluşturulduğu tarih Date(...)ve ikincisi ile oluşturulmuşsa new Date(...)(kullanım ISODate(...)ikinci satırdakiyle aynı ise)) böylece mongoexport çıktısı şöyle görünür:

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

Bu yüzden aynı gösterimi kullanmalısınız, çünkü katı JSON'un türü yoktur Date( <date> ).

Ayrıca JSON'nuz geçerli değil: tüm alan adlarının çift tırnak içine alınması gerekir, ancak mongoimport bunlar olmadan sorunsuz çalışır.

Ek bilgileri mongodb belgelerinde ve burada bulabilirsiniz .


Tarihleri ​​önerdiğiniz gibi ayarladım ve bu hatadan kurtuldum. Ancak, şimdi yeni bir tane alıyorum. İşte yeni hata: 'Sat Mar 2 15:22:07 istisna: Sağlanan JSON'un BSON temsili çok büyük: JSON dizesinin ayrıştırma hatası: veri: "1949 Cts Mar 2 15:22:07 2 Mart 15:22 karşılaşılan 34763 hataları:: 07 0 Cts Mar 2 15:22:07 hATA nesneleri ithal
amber4478

Sanırım bu alanla ilgili başka bir hatasizeT:{data: "1949..."}}
Denis Nikanorov

0

Muhtemel cevap için biraz geç, yeni insanlara yardımcı olabilir. Birden çok veritabanı örneğiniz olması durumunda:

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

Kimlik bilgilerinin gerekli olduğu varsayılarak, bu seçeneği kaldırın.


0

Benimkini vermek istememe rağmen cevap sayısı verildi. Sık sık alırdım. Birine yardımcı olabilir.

mongoimport original.json -d databaseName -c yourcollectionName --jsonArray --drop
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.