Program Tip

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

programtip 2020. 11. 22. 20:28
반응형

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:

  1. Array of object with valid coma positions & --jsonArray flag obligatory

    [
      {obj1},
      {obj2},
      {obj3}
    ]
    
  2. 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

반응형