programing

mongoimport를 사용하여 파일에서 mongodb로 json 가져오기

starjava 2023. 3. 8. 20:32
반응형

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로 Import하면

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?

Import하는 명령어에 --jsonArray 플래그를 추가하면 다음과 같이 됩니다.

imported 3 documents

원본 파일에 표시된 것과 같이 json 형식의 문서를 하나 대신합니다.

위의 파일 원본 포맷으로 mongodb에 json을 Import하려면 어떻게 해야 하나요?

mongoimport도구에는 다음과 같은 옵션이 있습니다.

--jsonArray입력 소스를 JSON 어레이로 취급하다

또는 다음과 같은 데이터 형식을 포함하는 파일에서 가져올 수 있습니다.db.collection.find()명령어를 입력합니다.다음은 university.mongodb.com 코스웨어의 몇 가지 콘텐츠 예시입니다.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 }

보시다시피 배열을 사용하지 않고 문서 간에 쉼표 구분 기호를 사용하지 않습니다.

최근에 이것이 형식을 준수한다는 것을 알게 되었습니다.

에 사용된 것처럼apache.spark.sql.DataFrameReader.json()방법.


사이드 노트:$ python -m json.tool --sort-keys --json-lines < data.jsonl또한 이 형식을 처리할 수 있습니다. 데모 및 자세한 내용은 여기를 참조하십시오.

MongoDB 프로젝트 블로그에서 다음 자료를 참조하면 Mongo에서 어레이가 어떻게 동작하는지 알 수 있습니다.

https://blog.mlab.com/2013/04/thinking-about-arrays-in-mongodb/

그렇지 않으면 다음 중 하나를 가져올 수 있습니다.

a) --jsonArray 플래그를 사용하여 3개의 다른 개체를 컬렉션으로 개별적으로 Import합니다.

b) 예를 들어 다음과 같이 전체 어레이를 단일 객체 내에 캡슐화합니다.

{
"mydata": 
    [
    {
          "project": "project_1",
          ...
          "priority": 7
    }
    ]
}

HTH

오늘 저는 정반대의 문제에 직면했습니다.결론은 다음과 같습니다.

각 어레이 엔트리가 개별 dtabase 엔트리로 취급되는 JSON 오브젝트의 배열을 한 번에 삽입하는 경우 다음 두 가지 구문 옵션을 사용할 수 있습니다.

  1. 유효한 혼수 위치 & --jsonArray 플래그가 있는 객체 배열 필수

    [
      {obj1},
      {obj2},
      {obj3}
    ]
    
  2. 기본적으로 잘못된 JSON 형식을 가진 파일 사용(예: 누락),--jsonArray 플래그 없음 및 JSON 객체 인스턴스 간

    {obj1}
    {obj2}
    {obj3}
    

어레이만 삽입하는 경우(즉, 데이터베이스의 최상위 시티즌으로 어레이)mongoDB는 정의상 문서를 JSON 오브젝트에 매핑하는 최상위 오브젝트로 지원하기 때문에 불가능하고 유효하지 않다고 생각합니다.즉, Alan WARD가 지적한 것처럼 어레이를 JSON 오브젝트로 정리해야 합니다.

오류:

$ ./mongoimport --db bookings --collection user --file user.json

2021-06-12T18:52:13.256+0530    connected to: localhost
2021-06-12T18:52:13.261+0530    Failed: error unmarshaling bytes on document #0: JSON decoder out of sync - data changing underfoot?
2021-06-12T18:52:13.261+0530    imported 0 documents

솔루션:JSON 데이터에 객체 배열이 포함되어 있는 경우 아래 명령어를 사용하여 Import하는 동안 --jsonArray를 사용해야 합니다.

$ ./mongoimport --db bookings --collection user --file user.json --jsonArray
2021-06-12T18:53:44.164+0530    connected to: localhost
2021-06-12T18:53:44.532+0530    imported 414 documents

언급URL : https://stackoverflow.com/questions/30380751/importing-json-from-file-into-mongodb-using-mongoimport

반응형