MongoDB는 모든 데이터베이스를 삭제합니다.


97

내 MongoDB에서 모든 데이터베이스를 삭제하는 명령이 있는지 알고 싶습니다.

데이터 테이블을 하나만 삭제하려면 아래 코드와 같이 데이터베이스 이름을 입력하면되지만 지정하고 싶지는 않습니다.

mongo DB_NAME --eval 'db.dropDatabase();'

답변:


142

작업을 수행하는 자바 스크립트 루프를 생성 한 다음 mongoconsole에서 실행할 수 있습니다.

var dbs = db.getMongo().getDBNames()
for(var i in dbs){
    db = db.getMongo().getDB( dbs[i] );
    print( "dropping db " + db.getName() );
    db.dropDatabase();
}

dropall.js에 저장 한 다음 실행합니다.

mongo dropall.js

13
var mongo = db.getMongo(); mongo.getDBNames().forEach(function (dbname) { var db = mongo.getDB(dbname); db.dropDatabase(); });
tjmehta 2013

3
코드 위의 붙여 넣기를 복사하여 mongo 콘솔에 입력 할 수도 있습니다.
Vivek Pandey

2
이로 인해 시스템 데이터베이스가 삭제되었습니다 (Mongo 버전 2.4.3). 다시 작동하도록 mongodb 프로세스를 다시 시작해야했습니다.
Felix Schmidt

7
누군가가 데이터베이스를 삭제하고 싶을 때 관리자 및 로컬과 같은 mongo 내부 데이터베이스를 삭제하고 싶지 않은 것 같습니다.
carlin.scott

또한 트랜잭션이 저장되는 구성 데이터베이스.
Rodrigo Pereira Fraga

103

다음 명령을 시도하십시오.

mongo --quiet --eval 'db.getMongo().getDBNames().forEach(function(i){db.getSiblingDB(i).dropDatabase()})'

1
훌륭하게 작동하며 js 파일을 만들 필요가 없습니다. 좋은.
Erik Honn 2013

그것을로드하는 대칭은 무엇입니까?
nha

방금 찾은이 접근 방식의 한 가지 문제는 db var가 mongo 콘솔 세션을 통해 지속되므로 누군가 데이터베이스 중 하나와 상호 작용하는 경우 db.getSiblingDB 호출에 의해 제외된다는 것입니다.
carlin.scott

3
좋은. 이것은 Docker에게 완벽합니다. : Ddocker exec mongodb sh -c "mongo --quiet --eval 'db.getMongo().getDBNames().forEach(function(i){db.getSiblingDB(i).dropDatabase()})'"
perezmlal

나는 같은 문제를 겪었고 이것이 자동화 작업에 가장 적합한 솔루션이라는 것을 알았습니다. 새 파일을 작성하고 CI / CD 파이프 라인에 다운로드하는 것을 원하지 않으므로 한 줄짜리 스크립트는 관리가 매우 간단합니다.
Carmine Ingaldi

21

간단한 mongo 명령으로도이 작업을 수행 할 수 있습니다.

db.adminCommand("listDatabases").databases.forEach( function (d) {
    if (d.name != "local" && d.name != "admin"  && d.name != "apiomat"  && d.name != "config")
        db.getSiblingDB(d.name).dropDatabase();
 })

모든 DB에 대해 if 조건을 작성하는 대신 배열에 간단히 넣고 indexOf를 수행 할 수 있습니다.
Sachin Gupta

5

@ALoR의 답변에 추가하면 편의를 위해 ~ / .mongorc.js에 다음을 넣을 수 있습니다.

function dropDatabases(){
    var mongo = db.getMongo();

    var dbNames = mongo.getDBNames();
    for (var i = 0; i < dbNames.length; i++) {
        var db = mongo.getDB( dbNames[i] );

        print( "Dropping database " + db.getName() + "..." );
        db.dropDatabase();
    }
}

그런 다음 몽고 셸에서 간단히 할 수 있습니다.

dropDatabases()

문서에서 :

Mongo는 mongo를 호출하는 사용자의 홈 디렉토리에서 .mongorc.js 파일을 읽습니다. 파일에서 사용자는 변수를 정의하고 mongo 셸 프롬프트를 사용자 지정하거나 셸을 시작할 때마다 업데이트 할 정보를 업데이트 할 수 있습니다.


문제를 수정하기 위해 업데이트했습니다. 들어 주셔서 감사합니다!
btiernay 2014

5

이것을 drop_all_dbs.js에 저장하십시오.

var databases = db.getMongo().getDBNames()
for(var i in databases){
    db = db.getMongo().getDB( databases[i] );
    if(db.getName() == "admin" || db.getName() == "local"){
        print("skipping db " + db.getName())
        continue
    }
    print( "dropping db " + db.getName() );
    db.dropDatabase();
}

이제 다음을 실행할 수 있습니다.

mongo drop_all_dbs.js

모든 데이터베이스 (관리 및 로컬 제외)가 삭제됩니다.

이 답변은 ALoR의 복사본입니다. 시스템 db의 드롭을 수정하십시오.


4

C # 공식 드라이버를 통해 쉽게 할 수 있습니다.

var _mongoServer = MongoServer.Create("mongodb://localhost:27020");

var names = _mongoServer.GetDatabaseNames();
foreach (var name in names)
{
   _mongoServer.DropDatabase(name);
}

예, 아이디어 일 수 있지만 C #없이하고 싶습니다. (죄송합니다.이 질문에 태그 C #을 사용했습니다.)
John

작업을 수행하는 자바 스크립트 루프를 생성 한 다음 mongoconsole에서 실행할 수 있습니다.
알로

2
@AndrewOrsich와 @JohnSmith가 스크립트를 게시했습니다.
ALoR 2011-06-17

1

var mongo = db.getMongo(); mongo.getDBNames().filter(n => n != 'admin' && n != 'local' && n != 'config').forEach(function (dbname) { var db = mongo.getDB(dbname); db.dropDatabase(); });

이것은 mongoshell에서 복사하고 실행하는 것이 안전합니다. 위의 모든 답변에 대한 크레딧. 'config'데이터베이스도 제외하십시오.


-2

간단합니다.

mongo --eval 'db.dropDatabase()'

또는 터미널에서 mongo 세션을 시작하고 다음을 작성할 수 있습니다.

db.dropDatabase()

정확히 똑같습니다.


문제는 개인이 아니라 한 모든 데이터베이스를 삭제하는 방법입니다
롭 H
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.