몽고디비 작업을 할때 가장 익숙한 파이썬을 쓰기 위해 pymongo를 사용하는데, 종종 pymongo에는 없는것 같은 기능들이 있다. (구글링 실력이 낮은지 찾아도 안 나온다...) 몽고디비에서 js를 사용할수 있는데 js를 이용한 방법들이 몽고디비 공식홈페이지에서 소개될 만큼 몽고디비 프로그래밍을 위한 주 언어(??) 가 js인것같아서 js를 이용한 방법을 찾아서 사용했더니 되었다.
pymongo로 만들려고 했던것.
특정 컬렉션을 한 db에서 다른 db로 renamecollection하기. (구글링 해도 못 찾겠다..) 프로그래밍적으로 find({})로 다 가져와서 다른 디비에 복사할수있으나, 다루는 데이터가 몇천,억단위이므로 몽고디비 명령어가 훨씬 더 빠르기에, pymongo에서 renamecollection으로 다른 디비로 옮기는걸 찾았으나 없어서 포기했다. (단순히 rename하는 예제만 있음.)
js function 만드는 법은 여기 있다 : https://docs.mongodb.com/manual/tutorial/store-javascript-function-on-server/
서버에 ssh로 접속해서 몽고디비 쉘로 들어간다. 그 후에 'use db이름' 으로 사용할 디비를 선택해준다. 디비를 선택 안하고 함수를 만들면 test라는 디비에 만들어진 함수가 들어간다.
그리고 메모장이나 아무 에디터를 열고 js코딩을 한다... 아래는 예시
db.system.js.save( { _id : 'renamecollection_to_anotherdb', value : function() { var collection_list = ['test_collection1', 'rarara'] collection_list.forEach(function(collection){ db.adminCommand( { renameCollection: "test1."+collection, to: "test2."+collection+'_success' } ) }); } } )
이렇게 짠 다음 위에서 연 몽고디비의 쉘에다 복붙을 한다. 뭔가 문법적으로 틀리면 아무것도 안 나오고
제대로 잘 짰으면 성공했다고 나온다. 이미 있는 함수를 수정할 경우 수정했다고 나오고, 에러인 경우 에러가 나온다.
성공한 경우 해당 디비의 System폴더 안에 System.js라는게 하나 생기고 이 안에 함수가 있다. (위에서 말했지만 디비를 선택하지않고 만들면 test라는 디비에 들어간다.)
그 후에
db.loadServerScripts();
renamecollection_to_anotherdb();
로 쉘에서 실행해주는데 공식홈페이지에 써있듯이 db.loadServerScripts();는 system.js를 가져온다는 거랜다..
엄청 쉬워보이는데 처음 해보는거라 오래 걸려서 써놓음..
'data engineering' 카테고리의 다른 글
AWS SDK. 코드 예제. (0) | 2018.04.10 |
---|---|
spark 로컬 테스트 관련. (0) | 2018.02.20 |
mongodb profile설정하기. (2) | 2017.11.28 |
pyspark 큰 용량의 collect()를 범위로 잘라서 가져오는 방법. (1) | 2017.10.30 |
pyspark에서 jar파일 사용하는방법. (py4j) (0) | 2017.07.20 |