MongoDB löscht jede Datenbank


97

Ich möchte wissen, ob es einen Befehl zum Löschen aller Datenbanken aus meiner MongoDB gibt.

Ich weiß, wenn ich nur eine Datentabelle löschen möchte, muss ich nur den Namen der Datenbank wie den folgenden Code eingeben, aber ich möchte ihn nicht angeben müssen.

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

Antworten:


142

Sie können eine Javascript-Schleife erstellen, die den Job erledigt, und sie dann in der Mongoconsole ausführen.

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

Speichern Sie es in dropall.js und führen Sie dann Folgendes aus:

mongo dropall.js

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

3
Sie können auch einfach den obigen Code kopieren und in die Mongo-Konsole eingeben.
Vivek Pandey

2
Dadurch wurden meine Systemdatenbanken gelöscht (Mongo Version 2.4.3). Ich musste den Mongodb-Prozess neu starten, damit er wieder funktioniert.
Felix Schmidt

7
Ich denke, wenn jemand seine Datenbanken löschen möchte, möchte er nicht die mongo-internen Datenbanken wie admin und local löschen.
carlin.scott

Auch die Konfigurationsdatenbank, in der die Transaktionen gespeichert sind.
Rodrigo Pereira Fraga

103

Versuchen Sie diesen Befehl:

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

1
Funktioniert hervorragend und Sie müssen keine JS-Datei dafür erstellen. Nett.
Erik Honn

Was ist die Symmetrie, um es zu laden?
nha

Ein Problem bei diesem Ansatz, das ich gerade gefunden habe, ist, dass die Datenbankvariable über Mongo-Konsolensitzungen bestehen bleibt. Wenn also jemand mit einer der Datenbanken interagiert, wird dies durch den Aufruf von db.getSiblingDB ausgeschlossen.
carlin.scott

3
Nett. Dies ist perfekt für Docker: Ddocker exec mongodb sh -c "mongo --quiet --eval 'db.getMongo().getDBNames().forEach(function(i){db.getSiblingDB(i).dropDatabase()})'"
perezmlal

Ich habe das gleiche Problem durchlaufen und festgestellt, dass dies die beste Lösung für Automatisierungsaufgaben ist. Sie
möchten

21

Sie können dies auch mit einem einfachen Mongo-Befehl tun:

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

Anstatt für jede Datenbank eine if-Bedingung zu schreiben, können wir einfach ein Array einfügen und einen indexOf erstellen.
Sachin Gupta

5

Wenn Sie die Antwort von @ ALoR ergänzen, können Sie der Einfachheit halber Folgendes in ~ / .mongorc.js einfügen

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

Dann können Sie an der Mongo-Muschel einfach machen

dropDatabases()

Aus den Dokumenten:

Mongo liest die Datei .mongorc.js aus dem Ausgangsverzeichnis des Benutzers, der mongo aufruft. In der Datei können Benutzer Variablen definieren, die Eingabeaufforderung der Mongo-Shell anpassen oder Informationen aktualisieren, die bei jedem Start einer Shell aktualisiert werden sollen.


Ich habe Aktualisierungen vorgenommen, um die Probleme zu beheben. Danke, dass du mitgemacht hast!
btiernay

5

Speichern Sie dies in 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();
}

Jetzt können Sie ausführen:

mongo drop_all_dbs.js

und alle Datenbanken (außer admin und local) werden gelöscht.

Diese Antwort ist eine Kopie von ALoRs, korrigieren Sie einfach den Tropfen der System-Datenbank


4

Sie können es einfach über den offiziellen c # -Treiber tun:

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

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

Ja, es könnte eine Idee sein, aber ich möchte es ohne C # tun. (Oh sorry, ich habe Tag C # für diese Frage verwendet)
John

Sie können eine Javascript-Schleife erstellen, die den Job erledigt, und sie dann in der Mongoconsole ausführen.
ALoR

2
@ AndrewOrsich und @ JohnSmith Ich habe das Skript gepostet.
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(); });

Dieser ist sicher zu kopieren und auf Mongoshell auszuführen. Credits für alle Antworten oben. Schließen Sie einfach auch die 'config'-Datenbank aus.


-2

Es ist so einfach wie

mongo --eval 'db.dropDatabase()'

Oder Sie können eine Mongo-Sitzung auf Ihrem Terminal starten und schreiben

db.dropDatabase()

Welches ist genau das gleiche.


Die Frage ist, wie alle Datenbanken
Rob H
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.