웹개발 및 최신 테크 소식을 전하는 블로그, 웹이즈프리

HOME > db

MongoDB 외부파일 import, export 방법

Last Modified : 2021-04-05 / Created : 2017-07-30
27,487
View Count

MongoDB(몽고db)를 사용하면서 외부파일을 가져오거나 내보낼 경우가 있을 수 있습니다. 백업을 위한 경우도 있으며 아니면 서버를 이전하면서 기존의 데이터베이스를 마이그레이션(Migration)하려고 많은 데이터를 한번에 옮길 수도 있겠죠~ 그럼 아래는 어떻게 import 또는 export하는지 알아보겠습니다.

참고로 비슷한 기능으로 mongodump, mongorestore 명령어가 있습니다. 이 명령어는 컬렉션 일부 등을 선택하여 보내거나 가져오는 목적과 달리 데이터베이스 전체를 내보내고 가져오는 경우에 많이 사용하니 참고하시기 바랍니다. 아래 링크를 참고하세요.

링크 바로가기 >
https://webisfree.com/2020-08-20/[mongodb]-몽고db-mongodump-그리고-mongorestore-사용하는-방법





# MongoDB 내보내기, export()

현재의 데이터베이스를 외부 파일로 내보내는 방법입니다. 이때 mongoexport를 사용합니다. 대량의 데이터를 백업하기 위한 방법으로도 사용할 수 있겠죠.
mongoexport -d databaseName -c collectionName -o myfile.json --port 27017

위 명령어를 실행하면 해당 경로에 myfile.json이라는 파일이 생성됩니다. 해당 파일에는 각각의 데이터가 담겨있겠죠. 여기서 각각의 옵션은 아래 내용입니다.

  • -d 또는 --database 데이터베이스 이름
  • -c 또는 --collection 컬렉션 이름
  • ​​​​​-o 또는 --output 저장할 파일 이름
  • ​​​​​​​--port 포트번호
  • --jsonArray 배열 형태로 반환해야 할 경우

만약 로그인이 필요한 경우는 어떻게할까요? user와 password설정이 필요하며 이 글 제일 하단을 보시면 나와있습니다.


! 만약 저장된 json 파일에 에러가 발생하는 경우

json으로 저장 후 다른 곳에서 문서를 열었을 때 에러가 발생할 수 있습니다. 가장 빈번한 원인이 EOF 등의 닫는 표기를 찾을 수 없는 경우가 원인일 수가 있는데요 ~ 이때 해결할 수 있는 방법이 --jsonArray 옵션을 사용하는 방법입니다. 예를들어 위의 mongoexport는 아래와 같이 다시 사용하게 되겠습니다.
mongoexport -d databaseName -c collectionName --jsonArray -o myfile.json --port 27017

이 명령어는 json 배열 형태로 저장하게됩니다. 즉 처음과 끝의 데이터를 [] 기호에 담게 되는데요 ~ 이처럼 저장해야 MongoDB가 아닌 다른 외부 편집기(엑셀이나 기타...)에서 사용할 때 에러가 없이 사용할 수 있으니 알아두시기 바랍니다.


@ 원하는 필드만 저장하려는 경우, f 옵션
참고로 원하는 필드만 설정해서 보낼수도 있습니다. 이때는 -f 옵션을 사용합니다.



# MongoDB 가져오기, import()

외부의 파일에서 현재의 데이터베이스로 불러오는 경우 mongoimport를 사용하면 간단합니다. 아래 예제를 봐주세요. mongoimport의 경우 --file로 불러올 파일을 설정합니다. export의 --out과는 이름이 다른점 주의하세요!!
mongoimport -d databaseName -c collectionName --file myFile.json

json포맷에 따라 --jsonArray 옵션이 필요할 수도 있습니다.
mongoimport -d databaseName -c collectionName --file myFile.json --jsonArray --port 27017

이처럼 --jsonArray는 파일의 포맷이 json 배열로 저장된 경우 불러와 import 할 경우에 사용합니다.


! mongoimport 사용시 컬렉션에 중복된 값이 존재하는 경우

동일한 컬렉션이 이미 존재하는 경우 mongoimport 사용시 새롭게 추가하게 됩니다. 이때 만약 기존의 값들을 무시가하고 새롭게 변경하려고 하는 경우... 즉 기존 컬렉션을 비우고 새롭게 업데이트 하려면 --drop 옵션을 사용하는 --것이 가능합니다.

--drop // 새로운 값으로 대체하기


즉 아래와 같이 사용할 수 있습니다.
mongoimport -d databaseName -c collectionName --drop --file myFile.json


! mongoexport, mongoimport 로그인이 필요한 경우

계정 설정의 인증이 필요한 경우 유저 아이디 및 패스워드가 필요합니다. 만약 아이디와 패스워드가 있는 경우 아래처럼 내보내거나 가져올 수 있습니다.
mongoexport -u username -p 'password' -d databaseName -c collectionName --out myfile.json --port 27017 --authenticationDatabase admin


! 인증시 꼭 --authenticationDatabase admin 추가할 것

위 명령어에서 --authenticationDatabase admin을 추가하지 않으면 다음과 같이 인증에러가 발생할 수 있습니다. user와 password만 설정하는 경우도 발생할 수 있으니 참고하세요.
{ ... "auth failed", code: 18 }

여기까지 인증에 대한 부분을 알아봤습니다.

Previous

MongoDB 복수개의 문자열 검색하기

Previous

MongoDB에서 String, 문자 바꾸기, replace()