MongoDBはすべてのデータベースを削除します


97

MongoDBからすべてのデータベースを削除するコマンドがあるかどうかを知りたいのですが。

データテーブルを1つだけドロップする場合は、次のコードのようにデータベースの名前を入力するだけで済みますが、指定する必要はありません。

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

回答:


142

あなたは仕事をするjavascriptループを作成して、それを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
データベースを削除したい場合、adminやlocalなどのmongo内部データベースを削除したくないと思います。
carlin.scott

また、トランザクションが格納される構成データベース。
ロドリゴペレイラフラガ

103

このコマンドを試してください:

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

1
うまく機能し、そのためにjsファイルを作成する必要はありません。いいね。
Erik Honn 2013年

それをロードするための対称性は何ですか?
nha 2013

私が見つけたこのアプローチの1つの問題は、db varがmongoコンソールセッションを通じて持続するため、誰かがデータベースの1つと対話している場合、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();
    }
}

次に、mongoシェルで簡単に実行できます

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の回答のコピーで、システムデータベースのドロップを修正するだけです


4

あなたはc#公式ドライバーを通してそれを簡単に行うことができます:

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

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

はい、それはアイデアかもしれませんが、C#なしでそれを実行したいと思います。(申し訳ありませんが、この質問にはタグC#を使用しました)
John

あなたは仕事をするjavascriptループを作成して、それをmongoconsoleで実行することができます。
ALoR 2011年

2
@AndrewOrsichと@JohnSmithはスクリプトを投稿しました。
ALoR

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()

まったく同じです。


問題は、個々のデータベースではなく、すべてのデータベースを削除する方法です
Rob H
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.