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?

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.


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


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.


20

konsola:

mongoimport -d dbName -c collectionName dataFile.js 

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

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ę.


3

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

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

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

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

1

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

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

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

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


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


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 .


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ę.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.