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

854

Was ist der einfachste Weg, dies über meine Bash-Eingabeaufforderung zu tun?

Kaffeemühle
quelle
5
Siehe diese Frage: stackoverflow.com/questions/3366397/… . Es ist wirklich einfach, es von der Mongo-Muschel aus zu machen.
Jesse Pollak

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

Tim Gautier
quelle
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.

Mnemosyn
quelle
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 }
Alex Baban
quelle
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.

Mikemaccana
quelle
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()
Knospe-e
quelle
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.

David
quelle
18

Andere Weise:

echo "db.dropDatabase()" | mongo <database name>
Gabriel Mancini
quelle
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()

bhv
quelle
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.
Anderson Lopes
quelle
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.

Helcode
quelle
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
Sergiuz
quelle
2

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

Lakmal Vithanage
quelle
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()
TechGuy
quelle
-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()"
jasenmichael
quelle
0

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

Shrinivas Kalangutkar
quelle
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")
Joe Drumgoole
quelle
-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.

nixxo_raa
quelle
-2

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

verwenden ; db.dropDatabase ();

Anoop Sharma
quelle
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