본문 바로가기
데이터&AI

python에서 mongoDB 이관하기!!

by 일등박사 2022. 5. 13.
728x90

안녕하세요!! 

 

우분투 서버를 세팅한뒤 (mongoDB설치까지 완료!!!)!! 

기존 윈도우PC에서 사용하던 mongoDB를 이관하고자하였습니다!!

 

구글링을 해보니!! mongodump를 활용하여 쉽게쉽게 dump 하더라구요!!

하지만 제 윈도우 PC에서는 왜그런지는 모르곘으나,, mongodum.exe가 설치가 되어있지 않았습니다!!

 

어떻게 방법을 해결할수 있을지 찾아보며

더욱이 많이 활용하는 pymongo로 어떻게 DB이괸이 가능할지 연구해본 결과를 공유하고자합니다!!

 

이관 과정은 아래의 2단계로 나누어집니다!!

① Window MongoDB의 데이터를 bson 파일로 저장

② bson 파일을 새로운 MongoDB로 넣기

 

Python 코드를 공유합니다!!!

① Window MongoDB의 데이터를 bson 파일로 저장하기

ㄱ. mongoDB에 접속, 데이터 테스트하기

import bson
import os

import pandas as pd
import numpy as np

from pymongo import MongoClient


### 기존 window MongoDB에서 데이터 불러오기!!
window_client = MongoClient("mongodb://localhost:27017/")
window_db = window_client['coin_news']
window_col = window_db['coin_news_table']

# e데이터 불러오기테스트
list(window_col.find({'source':'cobak_news'}).limit(5))

 ㄴ. 나만의 디렉토리에 bson 파일로 저장하기!!

 

##BSON 파일로 저장하기!!
os.chdir("C:\{나만의 디렉토리로!!}\\mongodump")
os.getcwd()

window_client = MongoClient("mongodb://localhost:27017/")
window_db = window_client['coin_news']
migration_table_list =['coin_daily_bestworst', 'coin_daily_keywords']
for coll in migration_table_list:
    with open(f'{coll}.bson', 'wb+') as f:
        for doc in window_db[coll].find():
            f.write(bson.BSON.encode(doc))
## 해당 디랙퇴에

테이블들이 각각 bson으로 잘 저장되었네요!

 

② bson 파일을 불러와서 새로운 MongoDB에 넣기!!

ㄱ. mongoDB에 접속, 데이터 테스트하기

## 신규 MOndoDB에 연결하기
porter_client = MongoClient("mongodb://{신규 MongoDB 주소!!}/")
porter_db = porter_client['coin_daily']
porter_col = porter_db[migration_table_list[0]]
## 처음에는 데이터가 없으니 아무것도 안나와야함!!
list(porter_col.find({}).limit(5))

 

 

ㄴ. bson 파일로 mongoDB 테이블에 데이터 넣기!

porter_db = porter_client['coin_daily']
for coll in  migration_table_list:
    with open(coll + '.bson', 'rb+') as f:
        porter_db[coll.split('.')[0]].insert_many(bson.decode_all(f.read()))
        
## 데이터 넣기 끝!! 이제 잘나오는지 테스트
porter_client = MongoClient("mongodb://{나의 mongo bDB 주소}/")
porter_db = porter_client['coin_daily']
porter_col = porter_db['coin_daily_bestworst']
list(porter_col.find({}).limit(5))

 

잘 이관이 되었군요~!^^

 

누군가 저와같이 mongoDB 이관 혹은 mongoDB dump를

python으로 하는 방법을 고민하시는 분이 있다면 도움이 되기를 기원합니다!!

728x90

댓글