Mongoimport pliku json

173

Mam plik json składający się z około 2000 rekordów. Każdy rekord, który będzie odpowiadał dokumentowi w bazie danych mongo, ma następujący format:

{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 znajduje się w pojedynczym wierszu pliku JSON, a jedyne podziały wierszy znajdują się na końcu każdego rekordu. Dlatego każdy wiersz w dokumencie 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, w czym problem. Czy ktoś może polecić rozwiązanie?

bursztyn 4478
źródło

Odpowiedzi:

301

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 to komuś pomoże.

bursztyn 4478
źródło
28
--jsonArraybędąc biletem, tak?
Dudo,
4
Krótka forma tego mongoimport -d <database> -c <collection> --jsonArray -f <filename>.json.
Adam Faryna
1
czasami wymagany jest użytkownik / hasłomongoimport --db dbName --collection collectionName --file fileName.json --jsonArray -u ser -p password
Diego Andrés Díaz Espinoza.
Dodając do @ DiegoAndrésDíazEspinoza komentarz, że w moim przypadku wystąpił błąd „nie można uwierzytelnić się za pomocą mechanizmu 'SCRAM-SHA-1'”. Tak więc po wyszukiwaniu stwierdziłem, że brakuje słowa kluczowego, authenticationDatabaseo którym mowa w odpowiedzi stackoverflow.com/a/58067928/6791222 .
Feroz Khan
61

Spróbuj tego,

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 spowodowany formatem daty.

Użyłem tego samego JSON z datą modyfikacji jak poniżej i zadział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"}}

mam nadzieję że to pomoże

Srivatsa N
źródło
Mam taki sam błąd jak w pytaniu ... Czy sprawdziłem ten import?
Denis Nikanorov
Dostosowałem daty tak, jak zasugerowałeś, i pozbyłem się tego konkretnego błędu. Jednak teraz dostaję nowy. Oto nowy błąd:
amber4478
Czy możesz wkleić nowy JSON i której wersji Mongo używasz?
Srivatsa N
Udało mi się naprawić błąd, dodając --jsonArray na końcu zapytania.
amber4478
Należy użyć ""wokół .json, jeśli zawiera nazwę folderu zawiera spacje. Odpowiedział Abhi poniżej Na przykład To nie zadziała, musisz dodać ""do lokalizacji pliku json, aby go zaimportować. D:\>mongoimport --db testimport --collection small_zip < D:\Dev\test test\small_zips.json The system cannot find the file specified. To działa 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

Korzystając z mongoimportu możesz osiągnąć to samo

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

gdzie,

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

--drop jest porzuceniem kolekcji, jeśli już istnieje.

KARTHIKEYAN.A
źródło
20

konsola:

mongoimport -d dbName -c collectionName dataFile.js 
Andrey
źródło
6

Użyłem poniższego polecenia do eksportu DB

mongodump --db database_name --collection collection_name

a poniższe polecenie działało dla mnie, aby zaimportować DB

mongorestore --db database_name path_to_bson_file
Ravi Hirani
źródło
6

Twoja składnia jest całkowicie poprawna w:

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

Upewnij się, że jesteś we właściwym folderze lub podaj pełną ścieżkę.

Robert Grutza
źródło
3

Uruchom polecenie importu w innym terminalu. (nie wewnątrz skorupy mangusty).

mongoimport --db test --collection user --drop --file ~/downloads/user.json
Nija I Pillai
źródło
3

W cmdsystemie Windows możesz użyć polecenia Command Prompcmd , w Ubuntu możesz użyć swojego terminal, wpisując następujące polecenie:

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

wtedy, kiedy otworzysz swoją powłokę mongo, zobaczysz, że sprawdzisz swoją nazwę_bazy_danych po uruchomieniu tego polecenia:

show databases
Noha Salah
źródło
2

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

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

Powłoka Mongo 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
Abhi
źródło
1

Próbowałem czegoś takiego i faktycznie działa:

mongoimport --db dbName --file D:\KKK\NNN\100YWeatherSmall.data.json
tyne
źródło
1

Działa to ze mną, gdy db z nazwą użytkownika i hasłem

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

db bez nazwy użytkownika hasło usuń -u my_user -p my_pass

Mój przykładowy plik json

{ 
    "_id" : ObjectId("5d11c815eb946a412ecd677d"), 
    "empid" : NumberInt(1), 
    "name" : "Rahul"
}
{ 
    "_id" : ObjectId("5d11c815eb946a412ecd677e"), 
    "empid" : NumberInt(2), 
    "name" : "Rahul"
}
Rahul Mahadik
źródło
1

Rozwiązanie:-

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

Przykład:-

Umieść plik w folderze administratora: -

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

Uruchom to polecenie na swoim teminalu: -

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

Wynik:-

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

Więcej linku

Parveen Chauhan
źródło
1
  1. Po prostu skopiuj ścieżkę do pliku json, na przykład „C: \ people.json”
  2. przejdź do C: \ Program Files \ MongoDB \ Server \ 4.2 \ bin
  3. otwórz cmd w tym folderze bin mongodb i uruchom to polecenie

mongoimport --jsonArray --db nazwa_db - kolekcja nazwa_kolekcji - ścieżka do pliku

przykład mongoimport --jsonArray --db learnmongo --collection person --file C: \ people.json

Hrishikesh Baidya
źródło
0

Jeśli spróbujesz wyeksportować tę kolekcję testową:

> 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 (pierwsza data utworzona za pomocą, Date(...)a druga utworzona za pomocą new Date(...)(jeśli ISODate(...)zostanie użyta będzie taka sama jak w drugiej linii)), więc wynik 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 } }

Powinieneś więc użyć tej samej notacji, ponieważ ścisły JSON nie ma typu Date( <date> ).

Również twój JSON jest nieprawidłowy: wszystkie nazwy pól muszą być zawarte w podwójnych cudzysłowach, ale mongoimport działa bez nich.

Dodatkowe informacje można znaleźć w dokumentacji mongodb oraz tutaj .

Denis Nikanorov
źródło
Dostosowałem daty tak, jak zasugerowałeś, i pozbyłem się tego konkretnego błędu. Jednak teraz dostaję nowy. Oto nowy błąd: „Sat Mar 2 15:22:07 wyjątek: Reprezentacja BSON dostarczonego JSON jest zbyt duża: Błąd podczas analizowania ciągu JSON w pobliżu: data:" 1949 Sat Mar 2 15:22:07 Sat Mar 2 15:22 : 07 zaimportowano 0 obiektów Sob Mar 2 15:22:07 BŁĄD: napotkano 34763 błędy '
amber4478
Myślę, że to kolejny błąd, który powrócił na boiskosizeT:{data: "1949..."}}
Denis Nikanorov
0

Trochę za późno na prawdopodobną odpowiedź, może pomóc nowym ludziom. W przypadku, gdy masz wiele instancji bazy danych:

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

Zakładając, że potrzebne są poświadczenia, w przeciwnym razie usuń tę opcję.

coolmego
źródło
0

Podano liczbę odpowiedzi, mimo że chciałbym wydać swoje polecenie. Często. To może komuś pomóc.

mongoimport original.json -d databaseName -c yourcollectionName --jsonArray --drop
Pramod Kharade
źródło