Wie lösche ich eine MongoDB-Datenbank von der Befehlszeile?


Antworten:


1084

So was:

mongo <dbname> --eval "db.dropDatabase()"

Weitere Informationen zum Skripting der Shell über die Befehlszeile finden Sie hier: https://docs.mongodb.com/manual/tutorial/write-scripts-for-the-mongo-shell/#scripting


Dies war in meinem Fall sehr hilfreich. Irgendwie hatte ich eine Datenbank mit dem Namen "mean-dev" aus einer älteren Installation, und die Eingabe von "mean-dev.dropDatabase ()" in die Mongo-Shell führte zu "ReferenceError: mean is not defined". Aber die Lösung in dieser Antwort zu verwenden, hat den Trick getan. +1
KP MacGregor

22
Wenn Sie ein von Menschen lesbares Ergebnis erhalten möchten, gehen Sie folgendermaßen vor: mongo <dbname> --eval "printjson(db.dropDatabase())"
Dmytro Uhnichenko

1
KP MacGregor. Sie sollten gewesen sein: "benutze mean-dev" + "db.dropDatabase ()"
Ozma

Vielen Dank. So können Sie Host und Port anpassen: mongo <yourDb> --host <yourHost> --port <yourPort> --eval 'db.dropDatabase()'
Clemens

844

Der beste Weg, dies zu tun, ist von der Mongodb-Konsole aus:

> use mydb; 
> db.dropDatabase();

Alternativ können Sie mongoddie Datendateien stoppen und aus Ihrem Datenverzeichnis löschen und anschließend neu starten.

Hinweis: Sie können die Datendateien auch in einen Unterordner verschieben und löschen, wenn Sie sicher sind, dass Sie sie nicht mehr benötigen.


2
Ich denke, er meint direkt von der Eingabeaufforderung, nicht wahr? In diesem Fall müssen Sie entweder eine .js-Datei mit diesen Befehlen generieren und diese über die Eingabeaufforderung mit "mongo dropdb.js" oder etwas anderem aufrufen oder die Dateien manuell ausführen und entfernen.
Remon van Vliet

2
useBeachten Sie jedoch, dass Sie den Befehl in der .js-Datei nicht verwenden können. Sie müssen eine Verbindung zur konkreten Datenbank herstellen (geben Sie den Datenbanknamen für den Mongo-Befehl an)
Betlista

46
Pro-Tipp: Nach dem Löschen einer Datenbank möchten Sie möglicherweise die Mongo-Shell beenden und Ihre ~/.dbshellDatei löschen , um den Befehlsverlauf zu löschen . (Es gibt möglicherweise einen besseren Weg, dies zu tun - ich bin mir nicht sicher.) Ich mache dies, weil der mongo-Befehl zum Löschen einer Datenbank im Gegensatz zu SQL nicht auf den Namen der zu löschenden Datenbank verweist - er löscht nur den Datenbank, mit der der Client derzeit verbunden ist. Durch Löschen Ihres Befehlsverlaufs wird verhindert, dass Sie den dropDatabaseBefehl versehentlich wiedergeben und unbeabsichtigt eine zweite Datenbank löschen .
Chris Allen Lane

3
Das ist eine kluge Idee, @chrisallenlane. Die Mongodb-Muschel ist manchmal ein ziemlich gefährliches Werkzeug ... :)
Mnemosyn

Warnung: Wenn Sie eine Datenbank löschen und eine neue Datenbank mit demselben Namen erstellen, müssen Sie entweder alle Mongos-Instanzen neu starten oder den Befehl flushRouterConfig für alle Mongos-Instanzen verwenden, bevor Sie in diese Datenbank lesen oder schreiben. Diese Aktion stellt sicher, dass die Mongos-Instanzen ihren Metadaten-Cache aktualisieren, einschließlich des Speicherorts des primären Shards für die neue Datenbank. Andernfalls können die Mongos Daten beim Lesen verpassen und Daten in einen falschen Shard schreiben.
Lekr0

114

Ich fand das leicht zu merken:

mongo //to start the mongodb shell

show dbs //to list existing databases

use <dbname> //the <dbname> is the database you'd like to drop

db //should show <dbname> just to be sure I'm working with the right database

db.dropDatabase() //will delete the database & return { "dropped" : "<dbname>", "ok" : 1 }

113

Sie brauchen keine Heredocs oder Eval , mongoselbst kann als Dolmetscher fungieren.

#!/usr/bin/env mongo
var db = new Mongo().getDB("someDatabase");
db.dropDatabase();

Machen Sie die Datei ausführbar und führen Sie sie aus.


3
Beachten Sie, dass der Skriptname mit enden muss .js, da er sonst als Datenbankadresse interpretiert wird.
Vegard

1
@Vegard Das stimmt nicht. Sie führen aus, mongo filenamewas nicht erforderlich ist - die Datei enthält bereits einen Interpreter in der obersten Zeile. Machen Sie einfach die Datei ausführbar und führen Sie sie aus./filename
mikemaccana

@mikemaccana Ich weiß das, aber das ./filenamewird tatsächlich laufen /usr/bin/env mongo filename, oder? Wenn filenamedies nicht der Fall ist .py, erkennt Mongo das Argument nicht als auszuführendes Skript.
Vegard

"Wenn Sie ./filename ausführen, wird tatsächlich / usr / bin / env mongo Dateiname ausgeführt, oder?" Überprüfen Sie die Ausgabe von ps.
Mikemaccana

@mikemaccana Die Ausgabe von pszeigt nur an, was zum Zeitpunkt des Aufrufs ausgeführt wird ps, nicht die Aufrufkette exec, die zu diesem Punkt führt, noch die Arbeit, die der Kernel zum Laden und Ausführen der Datei geleistet hat. Wenn Sie wissen möchten, was wirklich los ist, sollten Sie einen Wrapper schreiben /usr/bin/env, diesen als ausführbare Datei in der Shebang-Zeile festlegen und dann das Ganze mit starten strace.
Kbolino

31

Starten Sie MongoDB

Der Befehl zum Löschen der Datenbank lautet:

1. Wählen Sie zuerst die Datenbank aus, die Sie löschen möchten

use < database name >

2. Dann benutze dies ..

db.dropDatabase()

28

Sie können auch einen "Heredoc" verwenden:

mongo localhost/db <<EOF
db.dropDatabase()
EOF

Ergebnisse in Ausgabe wie:

mongo localhost/db <<EOF
db.dropDatabase()
EOF
MongoDB shell version: 2.2.2
connecting to: localhost/db
{ "dropped" : "db", "ok" : 1 }    
bye

Ich verwende gerne Heredocs für solche Dinge, falls Sie eine komplexere Befehlsfolge wünschen.



18

Hier sind einige verwenden vollständige Löschvorgänge für Mongodb mit Mongo Shell

So löschen Sie ein bestimmtes Dokument in Sammlungen:db.mycollection.remove( {name:"stack"} )

So löschen Sie alle Dokumente in Sammlungen: db.mycollection.remove()

So löschen Sie die Sammlung : db.mycollection.drop()

So löschen Sie die Datenbank : Gehen Sie zuerst per use mydbBefehl zu dieser Datenbank und dann

db.dropDatabase()

direkt von der Eingabeaufforderung oder Blash: mongo mydb --eval "db.dropDatabase()


15

In einem Terminal ausführen:

mongo // To go to shell

show databases // To show all existing databases.

use <DATA_BASE> // To switch to the wanted database.

db.dropDatabase() // To remove the current database.

1
Gleiche Antwort wie diese , die einen Monat zuvor gegeben wurde.
Dan Dascalescu

10

Öffnen Sie ein anderes Terminalfenster und führen Sie die folgenden Befehle aus:

mongodb
use mydb
db.dropDatabase()

Die Ausgabe dieser Operation muss wie folgt aussehen

MAC:FOLDER USER$ mongodb
> show databases
local      0.78125GB
mydb       0.23012GB
test       0.23012GB
> use mydb
switched to db mydb
>db.dropDatabase()
{ "dropped" : "mydb", "ok" : 1 }
>

Bitte beachten Sie, dass dies mydbnoch verwendet wird. Wenn Sie also zu diesem Zeitpunkt Eingaben einfügen, wird die Datenbank erneut initialisiert.


4

Mit Javascript können Sie ganz einfach ein drop_bad.js- Skript erstellen , um Ihre Datenbank zu löschen :

create drop_bad.js :

use bad;
db.dropDatabase();

Führen Sie dann 1 Befehl im Terminal aus, um das Skript mithilfe der Mongo-Shell auszuführen:

mongo < drop_bad.js

2

Obwohl es mehrere Methoden gibt, ist der beste (effizienteste und einfachste) Weg die Verwendung db.dropDatabase()


2

Stellen Sie an Ihrer Eingabeaufforderung zunächst mit dem folgenden Befehl eine Verbindung zu mongodb her:

mongo -h [host-name]:[port:number] -d [dbname] -u [username] -p [password]

Sie werden mit db auf db zugreifen <dbname>.

Führen Sie den folgenden Befehl aus, um die gesamte Datenbank zu löschen:

db.dropDatabase()

-h ist Hilfe, -d ist keine Option mehr wie `mongo --host [Hostname]: [Port: Nummer] -u [Benutzername] -p [Passwort] [Datenbankname] --eval" db.dropDatabase ( ) "`
jasenmichael

2

Ein Liner Remote entfernt alle Sammlungen aus der Mongo-Datenbank

note muss --host verwenden (-h ist Hilfe für den Mongo-Befehl), und -d ist keine Option. Wählen Sie die Datenbank und den Befehl nach dem Kennwort aus.

mongo --host <mongo_host>:<mongo_port> -u <db_user> -p <db_pass> <your_db> --eval "db.dropDatabase()"

0

Melden Sie sich in Ihrer mongoDB-Befehlszeile an: Geben Sie die folgenden Befehle ein. benutze "YOUR_DATABASE_NAME"; db.dropDatabase ();


0

Löschen Sie eine MongoDB-Datenbank mit Python:

import argparse

import pymongo


if __name__ == "__main__":
    """
    Drop a Database.
    """

    parser = argparse.ArgumentParser()
    parser.add_argument("--host", default='mongodb://localhost:27017',
                        help="mongodb URI [default: %(default)s]")
    parser.add_argument("--database", default=None,
                        help="database name: %(default)s]")

    args = parser.parse_args()

    client = pymongo.MongoClient(host=args.host)

    if args.database in client.list_database_names():
        client.drop_database(args.database)
        print(f"Dropped: '{args.database}'")
    else:
        print(f"Database '{args.database}' does not exist")

-1

db zeigt den aktuellen Datenbanknamen an: db.dropDatabase ();

1- Wählen Sie die zu löschende Datenbank mit dem Schlüsselwort ' use ' aus.

2- Geben Sie dann db.dropDatabase () ein.


-2

Verwenden Sie den folgenden Befehl aus der Mongo-Shell, um die Datenbank zu löschen

verwenden ; db.dropDatabase ();


Wie gibt dieser Befehl an, welche Datenbank gelöscht werden soll? Mit einer Datenbank „Auth-Benutzer“ genannt habe ich versucht , > use auth-users ; db.dropDatabase()und , > use auth-users; db.dropDatabase()und beide zurück[thread1] Error: [auth-users ; db.dropD atabase()] is not a valid database name :
Mr. Kennedy
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.