JSON 파일의 몽고 임포트


173

약 2000 개의 레코드로 구성된 json 파일이 있습니다. mongo 데이터베이스의 문서에 해당하는 각 레코드는 다음과 같이 형식화됩니다.

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

각 레코드는 JSON 파일에서 한 줄에 있으며 줄 바꿈은 모든 레코드 끝에 있습니다. 따라서 문서의 각 줄은 "{jobID :"로 시작합니다. 다음 명령을 사용하여 몽고 데이터베이스로 가져 오려고합니다.

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

그러나 다음과 같은 오류가 발생합니다.

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

나는 문제가 무엇인지 모른다. 누군가 솔루션을 추천 할 수 있습니까?

답변:


301

다음 쿼리를 사용하여 오류를 해결할 수있었습니다.

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

잘하면 이것은 누군가에게 도움이됩니다.


28
--jsonArray티켓이 되나요?
Dudo

4
이것의 짧은 형태 mongoimport -d <database> -c <collection> --jsonArray -f <filename>.json.
Adam Faryna

1
때때로 사용자 / 암호가 필요합니다mongoimport --db dbName --collection collectionName --file fileName.json --jsonArray -u ser -p password
Diego Andrés Díaz Espinoza

@ DiegoAndrésDíazEspinoza 의견에 덧붙여, 제 경우에는 "메커니즘 'SCRAM-SHA-1'을 사용하여 인증 할 수 없습니다"라는 오류가 발생했습니다. 따라서 검색 후 authenticationDatabase답변 stackoverflow.com/a/58067928/6791222에 언급 된 키워드가 누락 된 것으로 나타났습니다 .
페 로즈 칸

61

이 시도,

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

예,

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

문제는 날짜 형식 때문입니다.

아래와 같이 수정 된 날짜와 동일한 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:{"$date" : 1343779200000},
startTime:{"$date" : 1343779200000},
numCores:"64",
sizeT:{bss:"1881400168",text:"239574",data:"22504"}}

도움이 되었기를 바랍니다


질문에서와 같은 오류가 있습니다 ...이 가져 오기를 확인 했습니까?
Denis Nikanorov

나는 당신이 제안한대로 날짜를 조정했고 그 특정 오류를 제거했습니다. 그러나 지금 나는 새로운 것을 얻고 있습니다. 다음은 새로운 오류입니다.
amber4478

새 JSON과 현재 사용중인 Mongo 버전을 붙여 넣을 수 있습니까?
Srivatsa N

쿼리 끝에 --jsonArray를 추가하여 오류를 해결할 수있었습니다.
amber4478

사용할 필요가 ""주위 .json가 폴더 이름이 거기에 공백이 포함되어 있다면. 예를 들어 아래의 Abhi에 의해 답변 됨 작동하지 않습니다 "". 가져 오기 위해 json 파일 위치에 추가해야 합니다. D:\>mongoimport --db testimport --collection small_zip < D:\Dev\test test\small_zips.json The system cannot find the file specified. 작동 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 를 사용 하면 동일한 결과를 얻을 수 있습니다

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

어디,

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

--drop 이미 존재하는 경우 컬렉션을 삭제합니다.



6

DB 내보내기에 아래 명령을 사용했습니다.

mongodump --db database_name --collection collection_name

아래 명령으로 DB를 가져올 수있었습니다.

mongorestore --db database_name path_to_bson_file

6

구문이 다음과 같이 완전히 올바르게 나타납니다.

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

올바른 폴더에 있는지 또는 전체 경로를 제공하십시오.


3

다른 터미널에서 가져 오기 명령을 실행하십시오. (몽고 껍질 안에는 없습니다.)

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

3

Windows에서는 Command Prompcmd를 사용할 수 cmd있으며 Ubuntu terminal에서는 다음 명령을 입력하여 사용할 수 있습니다 .

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

그런 다음 mongo 쉘을 열면 다음 명령을 실행할 때 database_name을 확인하십시오.

show databases

2

이 명령은 컬렉션이 지정되지 않은 곳에서 작동합니다.

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

명령을 실행 한 후 Mongo 쉘

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

나는 이런 식으로 시도했고 실제로 작동합니다.

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

1

usrname 및 암호를 사용하여 db를 사용할 때 나와 함께 작동합니다.

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

사용자 이름 비밀번호가없는 db는 제거하십시오 -u my_user -p my_pass

내 샘플 JSON

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

1

해결책:-

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

예:-

파일을 관리자 폴더에 넣습니다 :-

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

당신의 teminal 에서이 명령을 실행하십시오 :-

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

산출:-

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

더 많은 링크


1
  1. 예를 들어 "C : \ persons.json"과 같은 json 파일의 경로를 복사하십시오.
  2. C : \ Program Files \ MongoDB \ Server \ 4.2 \ bin으로 이동하십시오.
  3. 해당 mongodb bin 폴더에서 cmd를 열고이 명령을 실행하십시오.

mongoimport --jsonArray --db dbname--collection collectionName-- 파일 FilePath

mongoimport --jsonArray --db learnmongo-컬렉션 명 --file C : \ persons.json


0

이 테스트 콜렉션을 내보내려고 시도하는 경우 :

> 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 (첫 번째로 만든 날짜와 Date(...)두 번째로 만든 날짜 new Date(...)( ISODate(...)두 번째 줄에서와 같은 경우 ))를 사용하면 mongoexport 출력은 다음과 같습니다.

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

엄격한 JSON에는 type이 없으므로 동일한 표기법을 사용해야합니다 Date( <date> ).

또한 JSON이 유효하지 않습니다. 모든 필드 이름은 큰 따옴표로 묶어야하지만 mongoimport는 해당 필드없이 잘 작동합니다.

mongodb 문서여기 에서 추가 정보를 찾을 수 있습니다 .


나는 당신이 제안한대로 날짜를 조정했고 그 특정 오류를 제거했습니다. 그러나 지금 나는 새로운 것을 얻고 있습니다. 새 오류는 다음과 같습니다. 'Sat Mar 2 15:22:07 예외 : 제공된 JSON의 BSON 표현이 너무 큽니다. JSON 문자열 구문 분석 실패 : data : "1949 Sat Mar 2 15:22:07 Sat Mar 2 15:22 : 07 수입 0 개체 토요일 3 월 2 일 15:22:07 오류 : 34763 오류 발생 '
amber4478

나는 필드에 retaled 다른 오류라고 생각sizeT:{data: "1949..."}}
데니스 Nikanorov

0

대답이 조금 늦어지면 새로운 사람들을 도울 수 있습니다. 여러 데이터베이스 인스턴스가있는 경우 :

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

신임 정보가 필요하다고 가정하면 그렇지 않은 경우이 옵션을 제거하십시오.


0

내가 명령을 내리고 싶지만 많은 답변이 주어졌다. 나는 자주 사용했다. 누군가에게 도움이 될 수 있습니다.

mongoimport original.json -d databaseName -c yourcollectionName --jsonArray --drop
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.