2013-03-02 14 views
78

Mam plik json składający się z około 2000 rekordów. Każdy rekord, który będzie odpowiadać dokumentu w bazie danych Mongo jest sformatowany w następujący sposób:Mongoimport pliku 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: 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"}}, 

Każdy rekord jest w jednej linii w pliku JSON, a jedyne podziały wierszy są na końcu każdego rekordu. Dlatego każda linia dokumentu zaczyna się od „{jobid:” ... Próbuję zaimportować je do bazy danych Mongo za pomocą następującego polecenia:

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

Jednak pojawia się następujący błąd:

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 

Nie wiem, czym jest problem. Czy ktoś może polecić rozwiązanie?

Odpowiedz

147

udało mi się naprawić błąd za pomocą następującego zapytania:

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

Mam nadzieję, że jest to pomocne dla kogoś.

+13

' --jsonArray' jest biletem, tak? – Dudo

+0

@Mallanaga Tak, to też zadziałało dla mnie –

+0

Świetnie, dokładnie tego potrzebowałem – Feanaro

33

spróbować,

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

Przykład,

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

Problem jest z powodu ci formatu daty.

Kiedyś sam JSON z datą zmodyfikowanym jak poniżej i to działało

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

nadzieję, że to pomaga

+0

Mam taki sam błąd, jak w pytaniu ... Czy sprawdziłeś ten import? –

+0

Poprawiłem daty zgodnie z sugestiami i wyeliminowałem ten konkretny błąd. Jednak teraz otrzymuję nowy. Oto nowy błąd: – amber4478

+0

Czy możesz wkleić nowy JSON i wersję Mongo? –

0

Jeśli spróbujesz wyeksportować ten zbiór testowy:

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

z mongoexport (The pierwsza data utworzona z Date(...), a druga utworzona z new Date(...) (jeśli użyjemy ISODate(...) będzie taka sama jak w drugim linia)) Wyjście tak mongoexport będzie wyglądać następująco:

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

Należy więc użyć tego samego zapisu, ponieważ ścisłe JSON nie ma typ Date(<date>).

Również twój JSON nie jest ważny: wszystkie nazwy pól muszą być ujęte w podwójny cudzysłów, ale mongoimport działa bez nich.

Możesz znaleźć dodatkowe informacje w mongodb documentation i here.

+0

Poprawiłem daty zgodnie z sugestiami i wyeliminowałem ten konkretny błąd. Jednak teraz otrzymuję nowy. Oto nowy błąd: " Sob Mar 2 15:22:07 wyjątek: reprezentacja BSON dostarczonego JSON jest zbyt duża: Błąd parsowania łańcucha JSON w pobliżu: dane:" 1949 sob. Mar 2 15:22:07 sob. Mar 2 15:22:07 zaimportowane 0 obiektów Sob 2 marca 15:22:07 BŁĄD: napotkano 34763 błędów " – amber4478

+0

Myślę, że to kolejny błąd przechwycony do pola' sizeT: {data: "1949 ..."}} ' –

2

składni pojawia się zupełnie słusznie:

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

Upewnij się, jesteś w odpowiednim folderze lub podać pełną ścieżkę.

1

To polecenie działa tam, gdzie nie określono kolekcji.

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

Mongo powłoki po wykonaniu polecenia

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 
14

konsola:

mongoimport -d dbName -c collectionName dataFile.js 
2

Użyłem poniżej komendy do wywozu DB

mongodump --db database_name --collection collection_name 

i poniżej komenda pracował dla mnie zaimportować DB

mongorestore --db database_name path_to_bson_file 
1

Korzystanie mongoimport może jesteś w stanie osiągnąć ten sam

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

gdzie

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

--drop jest upuść kolekcję jeśli już istnieje.