mongoimport를 사용하여 파일에서 mongodb로 json 가져 오기
다음과 같이 json_file.json이 있습니다.
[
{
"project": "project_1",
"coord1": 2,
"coord2": 10,
"status": "yes",
"priority": 7
},
{
"project": "project_2",
"coord1": 2,
"coord2": 10,
"status": "yes",
"priority": 7
},
{
"project": "project_3",
"coord1": 2,
"coord2": 10,
"status": "yes",
"priority": 7
}
]
다음 명령을 실행하여 mongodb로 가져옵니다.
mongoimport --db my_db --collection my_collection --file json_file.json
다음과 같은 오류가 발생합니다.
Failed: error unmarshaling bytes on document #0: JSON decoder out of sync - data changing underfoot?
명령에 --jsonArray 플래그를 추가하면 다음과 같이 가져옵니다.
imported 3 documents
원본 파일에 표시된대로 json 형식의 하나의 문서 대신.
위에 표시된 파일의 원래 형식으로 json을 mongodb로 어떻게 가져올 수 있습니까?
MongoDB 프로젝트 블로그의 다음 참조는 Mongo에서 어레이가 작동하는 방식에 대한 통찰력을 얻는 데 도움이 될 수 있습니다.
https://blog.mlab.com/2013/04/thinking-about-arrays-in-mongodb/
그렇지 않으면 수입품을 구성하고 다음 중 하나를 수행합니다.
a) --jsonArray 플래그를 사용하여 세 가지 다른 객체를 별도로 컬렉션으로 가져옵니다. 또는
b) 단일 객체 내에 전체 배열을 캡슐화합니다. 예를 들면 다음과 같습니다.
{
"mydata":
[
{
"project": "project_1",
...
"priority": 7
}
]
}
HTH.
The mongoimport
tool has an option:
--jsonArray
treat input source as a JSON array
Or it is possible to import from file
containing same data format as
the result of db.collection.find()
command.
Here is example from university.mongodb.com courseware
some content from grades.json
:
{ "_id" : { "$oid" : "50906d7fa3c412bb040eb577" }, "student_id" : 0, "type" : "exam", "score" : 54.6535436362647 }
{ "_id" : { "$oid" : "50906d7fa3c412bb040eb578" }, "student_id" : 0, "type" : "quiz", "score" : 31.95004496742112 }
{ "_id" : { "$oid" : "50906d7fa3c412bb040eb579" }, "student_id" : 0, "type" : "homework", "score" : 14.8504576811645 }
As you can see,
no array used and
no comma delimiters between documents either.
I discover, recently,
that this complies with the JSON Lines text
format .
Like one used in apache.spark.sql.DataFrameReader.json()
method .
I faced opposite problem today, my conclusion would be:
If you wish to insert array of JSON objects at once, where each array entry shall be treated as separate dtabase entry, you have two options of syntax:
Array of object with valid coma positions & --jsonArray flag obligatory
[ {obj1}, {obj2}, {obj3} ]
Use file with basically incorrect JSON formatting (i.e. missing
,
between JSON object instances & without --jsonArray flag{obj1} {obj2} {obj3}
If you wish to insert only an array (i.e. array as top-level citizen of your database) I think it's not possible and not valid, because mongoDB by definition supports documents as top-level objects which are mapped to JSON objects afterwards. In other words, you must wrap your array into JSON object as ALAN WARD pointed out.
참고URL : https://stackoverflow.com/questions/30380751/importing-json-from-file-into-mongodb-using-mongoimport
'Program Tip' 카테고리의 다른 글
Bootstrap의 'popover'컨테이너에 동적으로 클래스 추가 (0) | 2020.11.22 |
---|---|
부트 스트랩 : 패널 바닥 글에서 왼쪽 및 오른쪽으로 당겨 바닥 글 나누기 (0) | 2020.11.22 |
부모 컨테이너를 기준으로 범위의 시작 및 끝 오프셋 가져 오기 (0) | 2020.11.22 |
Python 셸에서 인수를 사용하여 파일 실행 (0) | 2020.11.22 |
Grails 2.0에서 Grails 구성에 액세스하는 방법은 무엇입니까? (0) | 2020.11.22 |