MongoDB에서 데이터를 외부 파일로 내보낼 때는 mongoexport 명령어를 사용하면 됩니다. mongodump가 전체 데이터베이스 백업에 적합하다면, mongoexport는 원하는 필드만 골라서 CSV나 JSON 형식으로 추출할 수 있어 훨씬 유연합니다.
mongoexport 기본 문법
기본적인 사용 형식은 다음과 같습니다.
mongoexport -d 데이터베이스이름 -c 컬렉션이름 -f 필드이름 --type=csv -o 저장경로/파일이름;
각 옵션의 의미는 다음과 같습니다.
- -d : 대상 데이터베이스 이름
- -c : 내보낼 컬렉션 이름
- -f : 추출할 필드 이름 (여러 개는 쉼표로 구분)
- --type : 출력 형식 (csv 또는 json)
- -o : 결과 파일이 저장될 경로와 파일명
예제 컬렉션 생성하기
실습을 위해 먼저 컬렉션을 만들고 문서를 삽입해 보겠습니다.
> db.demo284.insertOne({"FirstName":"Chris"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e4abc9e9127fafea82a2cfc")
}
> db.demo284.insertOne({"FirstName":"Robert"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e4abca39127fafea82a2cfd")
}
> db.demo284.insertOne({"FirstName":"Bob"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e4abca79127fafea82a2cfe")
}저장된 문서 확인하기
find() 메서드를 사용하면 컬렉션의 모든 문서를 조회할 수 있습니다.
> db.demo284.find();
위 명령을 실행하면 다음과 같은 결과가 출력됩니다.
{ "_id" : ObjectId("5e4abc9e9127fafea82a2cfc"), "FirstName" : "Chris" }
{ "_id" : ObjectId("5e4abca39127fafea82a2cfd"), "FirstName" : "Robert" }
{ "_id" : ObjectId("5e4abca79127fafea82a2cfe"), "FirstName" : "Bob" }특정 필드만 CSV 파일로 내보내기
이제 demo284 컬렉션에서 FirstName 필드만 골라서 바탕화면의 "C:\Users\Amit\Desktop\Result;" 경로로 내보내 보겠습니다.
C:\Program Files\MongoDB\Server\4.0\bin>mongoexport -d test -c demo284 -f FirstName --type=csv -o C:\Users\Amit\Desktop\Result;
명령이 정상적으로 실행되면 다음과 같은 출력 결과를 확인할 수 있습니다.
2020-02-17T21:49:36.708+0530 connected to: localhost 2020-02-17T21:49:36.712+0530 exported 3 records
"connected to: localhost" 메시지는 로컬 MongoDB 서버에 성공적으로 연결되었음을 의미하고, "exported 3 records"는 총 3개의 문서가 파일로 내보내졌다는 뜻입니다.
결과 파일 확인하기
생성된 "Result" 파일은 바탕화면(Desktop)에 저장됩니다. 파일 위치는 아래 이미지에서 확인할 수 있습니다.

파일을 열어보면 FirstName 필드의 값만 CSV 형식으로 깔끔하게 정리되어 있는 것을 볼 수 있습니다.

마무리
이처럼 mongoexport를 활용하면 복잡한 스크립트 없이도 단 한 줄의 명령으로 MongoDB 컬렉션에서 필요한 필드만 손쉽게 추출할 수 있습니다. 데이터 분석용으로 엑셀에서 열어야 할 때는 --type=csv 옵션을, 애플리케이션 간 데이터 이관에는 --type=json 옵션을 사용하는 것이 좋습니다. 여러 필드를 동시에 내보내고 싶다면 -f 옵션 뒤에 필드 이름을 쉼표로 구분하여 나열하면 됩니다.