본문 바로가기

Database/MongoDB

mongoexport, mongoimport 사용해보기

소프트웨어 마에스트로를 통해 진행하는 프로젝트에서 mongodb를 사용하고 있다.

칵테일 관련 어플리케이션이라 칵테일 레시피에 대한 DB를 구축해야 한다. 

개발 중 새로운 칵테일 레시피가 추가되거나, 기존의 레시피에 대한 도수, 난이도 등의 속성이 지속적으로 추가되면서

해당 수정내용에 대한 변경사항 추적과 버전 관리가 필요하다고 느꼈다.

 

버전 관리와 변경사항 주적은 편리하고도 때깔 좋은 git이라는 도구가 있으니 걱정할 일이 없는데

mongoDB에 있는 데이터들에 대해서 어떻게 git을 적용하지?라는 생각이 들었다.

그래서 mongodb에 있는 데이터를 빠르게 가져오고, 변경된 데이터를 빠르게 mongodb에 적용할 수 있는 도구가 필요했다.

 

문제.

처음에는 nodejs의 mongodb 모듈을 사용해서 직접 프로그램을 작성하려고 했는데

프로그램을 직접 작성하게 되면 다음과 같은 문제가 생겼다.

 

1. node exportCocktail.js 와 같은 명령어가 뽀대가 안 난다. 

2. json으로 export시 ObjectId에 대한 정보가 사라진다. 

두번째 문제가 제일 컸는데,,,, 프로그램을 직접 작성하면 json파일이 다음과 같이 저장이 된다. 

 

내가 원하는 것.

{
    "_id": {
      "$oid": "62d83f1d6503e093649025f3"
    },
    "photoUrl": "https://recipe1.ezmember.co.kr/cache/recipe/2019/12/21/ded6d01c1887044c4ffb952d2b26cb4c1.jpg",
    "ratingSum": 0,
    "ratedPeopleNum": 0,
    "name": "리머릭",
    "detail": "처리하기 어려운 위스키가 있다면...! 상큼하고 청량해서 쭉쭉 들어가는 리머릭 어떠세요?",
    "numberPeople": "1인분",
    "time": "5분 이내",
    "difficulty": 1,
    "ingredientsName": "

nodejs로 하면 문제점. 

{
    "_id": "62d83f1d6503e093649025f3",
    "photoUrl": "https://recipe1.ezmember.co.kr/cache/recipe/2019/12/21/ded6d01c1887044c4ffb952d2b26cb4c1.jpg",
    "ratingSum": 0,
    "ratedPeopleNum": 0,
    "name": "리머릭",
    "detail": "처리하기 어려운 위스키가 있다면...! 상큼하고 청량해서 쭉쭉 들어가는 리머릭 어떠세요?",
    "numberPeople": "1인분",
    "time": "5분 이내",
    "difficulty": 1,
    "ingredientsName": "
    .....

이러면 문제가 무엇이냐. 

_id가 ObjectId가 아니어서 DB에 그냥 String으로 저장이 된다.

 

mongoexport와 mongoimport

고민을 하면서 구글을 열심히 뒤지다가 mongoexport, mongoimport라는 도구를 찾았다. 

https://www.mongodb.com/docs/database-tools/mongoexport/

 

mongoexport — MongoDB Database Tools

Docs Home → MongoDB Database Toolsmongoexport is a command-line tool that produces a JSON or CSV export of data stored in a MongoDB instance.Run mongoexport from the system command line, not the mongo shell.See also: mongoimport which provides the corres

www.mongodb.com

 

이 친구를 사용하면 쉽게 db의 정보를 json 파일로 저장할 수 있다.

뭔가 mongoDB Compass에서 이 친구를 사용하는 것처럼 느껴졌다.

 

export 친구를 사용하면 json으로 저장을,

import 친구를 사용하면 json을 db로 저장할 수 있다.

한줄로 끝나니까 굉장히 편하다. 

 

설치

쓸려면 설치를 해줘야 한다.

mac 기준으로 brew를 사용해 설치해주면 된다.

brew install mongodb/brew/mongodb-database-tools

개꿀

 

export

설치를 했다면 

export는 다음과 같다. 

 

mongoexport --uri="{mongoUri}" --collection={collection} --db={database} --out=outputFile.json --jsonArray --pretty

- mongoUri는 연결할 때 쓰는 mongoUri를 입력하면 된다.

어떤 mongodb에 연결할 건지는 알아야 되니까~

 

- collection은 export 하고 싶은 collection을

- database는 해당 collection이 있는 database이름을 적어주면 된다. 

- outputFile.json과 같이 어떤 파일로 저장을 할 건지를 적어주고 

- jsonArray 옵션을 주면 배열의 형태로 감싸서 저장해준다. 

- pretty는 말 그대로 이쁘게

 

다양한 옵션이 있는 것 같다.

필요한 옵션이 있다면 읽어보고 용도에 맞게 잘 사용하자.

 

import

import 도 똑같다.

mongoimport --uri="{mongoUri}" --collection={collection} --db={database} --mode=merge --file=./input.json --jsonArray

--mode 옵션의 경우 기존 collection에 있는 데이터를 어떻게 할 것인지에 대한 옵션이다.

insert, upsert, merge, delete 가 있고 

insert는 아래로 upsert는 위로 넣는 것 같다.

merge는 db안에 같은 document가 있을 경우 합병하는 옵션이다.

delete는 뭐,,, 말 안 해도 아시겠쬬. 

 

--file에 import 할 파일의 경로를 넣어준다. 

 

한 줄로 끝나니 편한데

저 명령어를 다 치고 있을 순 없으니 shell 파일로 만들어줬다. 

.sh

조금은 관리가 편해진 것 같다. 

git을 사용하거나 수정하기 전 자동으로 스크립트가 실행되게 하고 싶은데

그건 차차 생각해봐야겠다. 

 

ps. mongodb의 export와 import를 한다고 프로그램 짜느라 1시간 쓴 것 같은데

커맨드 라인 한 줄로 되니까 참 좋은데,,,,

미리미리 알아볼 껄,,,,,

잘가 친구들,,,,