Computer >> 컴퓨터 >  >> 프로그래밍 >> MongoDB

MongoDB에서 모든 데이터베이스를 반복 처리하는 방법 완벽 가이드

MongoDB의 모든 데이터베이스 반복 처리하기

MongoDB에서 서버에 존재하는 모든 데이터베이스를 조회하거나 반복(iterate) 처리하려면 먼저 admin 데이터베이스로 전환해야 합니다. 그 이유는 listDatabases 명령이 admin 데이터베이스에서만 실행할 수 있기 때문입니다.

1단계: admin 데이터베이스로 전환

getSiblingDB() 메서드를 사용하면 현재 연결을 유지한 채 다른 데이터베이스로 손쉽게 전환할 수 있습니다. 아래 쿼리는 admin 데이터베이스로 전환한 뒤, 전체 데이터베이스 목록을 가져오는 방법을 보여줍니다.

> switchDatabaseAdmin = db.getSiblingDB("admin");
admin
> allDatabaseName = switchDatabaseAdmin.runCommand({ "listDatabases": 1 }).databases;

2단계: 실행 결과 확인

위 명령을 실행하면 서버에 등록된 모든 데이터베이스의 배열이 반환됩니다. 각 항목에는 데이터베이스 이름(name), 디스크 사용량(sizeOnDisk, 바이트 단위), 그리고 데이터 존재 여부(empty)가 포함됩니다.

[
    {
        "name" : "admin",
        "sizeOnDisk" : 495616,
        "empty" : false
    },
    {
        "name" : "config",
        "sizeOnDisk" : 98304,
        "empty" : false
    },
    {
        "name" : "local",
        "sizeOnDisk" : 73728,
        "empty" : false
    },
    {
        "name" : "sample",
        "sizeOnDisk" : 1335296,
        "empty" : false
    },
    {
        "name" : "sampleDemo",
        "sizeOnDisk" : 278528,
        "empty" : false
    },
    {
        "name" : "studentSearch",
        "sizeOnDisk" : 262144,
        "empty" : false
    },
    {
        "name" : "test",
        "sizeOnDisk" : 8724480,
        "empty" : false
    }
]

3단계: 결과를 반복하여 활용하기

반환된 배열은 JavaScript 배열이므로 forEach()를 사용해 각 데이터베이스를 순회하며 원하는 작업을 수행할 수 있습니다. 예를 들어 데이터베이스 이름만 출력하려면 다음과 같이 작성합니다.

> allDatabaseName.forEach(function(dbInfo) {
...     print(dbInfo.name);
... });

이 코드는 admin, config, local, sample 등 모든 데이터베이스 이름을 한 줄씩 출력합니다. 이 방식을 응용하면 각 데이터베이스별 컬렉션 통계 수집, 백업 스크립트 작성, 용량 모니터링 등 다양한 관리 작업을 자동화할 수 있습니다.

참고: 더 간단한 대안

단순히 데이터베이스 목록만 빠르게 확인하고 싶다면 mongo 셸에서 show dbs 명령을 사용하는 것도 좋은 방법입니다. 다만 프로그래밍 방식으로 결과를 가공하거나 자동화 스크립트에 활용하려면 위에서 소개한 listDatabases 명령을 사용하는 것이 훨씬 유연합니다.