MongoDB에 존재하는 전체 데이터베이스 목록을 JavaScript 배열 형태로 가져오고 싶다면 runCommand() 메서드를 활용하면 됩니다. 이 메서드에 { listDatabases: 1 } 명령을 전달하면 서버의 모든 데이터베이스에 대한 이름, 디스크 사용량 등 상세 정보를 한 번에 조회할 수 있습니다.
참고로 listDatabases 명령은 관리 권한이 필요하므로 반드시 admin 데이터베이스에서 실행해야 합니다.
1단계: listDatabases 명령 실행하기
먼저 admin 데이터베이스로 전환한 뒤 runCommand()를 실행합니다.
> use admin;
switched to db admin
> allDatabasesDetails = db.runCommand({listDatabases: 1});
2단계: 실행 결과 확인하기
위 명령을 실행하면 다음과 같이 각 데이터베이스의 이름(name), 디스크 사용 크기(sizeOnDisk), 빈 데이터베이스 여부(empty) 정보가 담긴 결과를 확인할 수 있습니다.
{
"databases" : [
{
"name" : "admin",
"sizeOnDisk" : 847872,
"empty" : false
},
{
"name" : "config",
"sizeOnDisk" : 98304,
"empty" : false
},
{
"name" : "local",
"sizeOnDisk" : 73728,
"empty" : false
},
{
"name" : "sample",
"sizeOnDisk" : 1273856,
"empty" : false
},
{
"name" : "sampleDemo",
"sizeOnDisk" : 352256,
"empty" : false
},
{
"name" : "studentSearch",
"sizeOnDisk" : 262144,
"empty" : false
},
{
"name" : "test",
"sizeOnDisk" : 9527296,
"empty" : false
}
],
"totalSize" : 12435456,
"ok" : 1
}3단계: 데이터베이스 이름만 배열로 추출하기
조회된 결과 객체의 databases 배열을 반복문으로 순회하면서 이름 값만 새로운 배열에 담으면 됩니다.
> allDatabaseName = []
[ ]
> for (var j in allDatabasesDetails.databases) { allDatabaseName.push(allDatabasesDetails.databases[j].name) }
반복문이 정상적으로 완료되면 다음과 같이 처리된 데이터베이스의 개수가 출력됩니다.
7
이제 allDatabaseName 배열에는 "admin", "config", "local", "sample", "sampleDemo", "studentSearch", "test"와 같이 각 데이터베이스의 이름이 순서대로 저장됩니다. 이렇게 만든 배열은 특정 데이터베이스 검색, 목록 필터링, 애플리케이션 내 동적 처리 등 다양한 후속 작업에 활용할 수 있습니다.