Jak usunąć bazę danych MongoDB z wiersza polecenia?

854

Jaki jest najłatwiejszy sposób na zrobienie tego z mojego monitu bash?

młynek do kawy
źródło
5
zobacz to pytanie: stackoverflow.com/questions/3366397/… . Naprawdę łatwo to zrobić z muszli mangowej.
Jesse Pollak

Odpowiedzi:

1084

Lubię to:

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

Więcej informacji na temat skryptowania powłoki z wiersza poleceń tutaj: https://docs.mongodb.com/manual/tutorial/write-scripts-for-the-mongo-shell/#scripting

Tim Gautier
źródło
W moim przypadku było to bardzo pomocne. W jakiś sposób miałem bazę danych o nazwie „mean-dev” ze starszej instalacji, a wpisanie „mean-dev.dropDatabase ()” w powłoce mangowej spowodowało „ReferenceError: średnia nie jest zdefiniowana”. Ale skorzystanie z rozwiązania w tej odpowiedzi rozwiązało problem. +1
KP MacGregor
22
Jeśli chcesz uzyskać wynik czytelny dla człowieka, zrób to w ten sposób: mongo <dbname> --eval "printjson(db.dropDatabase())"
Dmytro Uhnichenko
1
KP MacGregor. powinieneś być: „use mean-dev” + „db.dropDatabase ()”
ozma
Dzięki. W ten sposób możesz dostosować hosta i port: mongo <yourDb> --host <yourHost> --port <yourPort> --eval 'db.dropDatabase()'
Clemens
844

Najlepszym sposobem na to jest z konsoli mongodb:

> use mydb; 
> db.dropDatabase();

Możesz też zatrzymać mongodi usunąć pliki danych z katalogu danych, a następnie uruchomić ponownie.

Wskazówka: możesz również przenieść pliki danych do podfolderu i usunąć je, jeśli masz pewność, że już ich nie potrzebujesz.

mnemosyn
źródło
2
Myślę, że ma na myśli bezpośrednio z monitu, prawda? W takim przypadku musisz wygenerować plik .js za pomocą tych poleceń i wywołać go z wiersza polecenia za pomocą „mongo dropdb.js” lub coś w tym stylu lub zrobić to, co chcesz i ręcznie usunąć pliki.
Remon van Vliet,
2
ale pamiętaj, że nie możesz użyć usepolecenia w pliku .js, musisz połączyć się z konkretnym DB (podaj nazwę
db
46
Wskazówka: po usunięciu bazy danych możesz wyjść z powłoki mongo i usunąć ~/.dbshellplik, aby wyczyścić historię poleceń. (Może to być lepszy sposób - nie jestem pewien.) Robię to, ponieważ w przeciwieństwie do SQL polecenie mongo do usunięcia bazy danych tak naprawdę nie odwołuje się do nazwy bazy danych do usunięcia - po prostu usuwa baza danych, z którą klient jest obecnie podłączony. Wyczyszczenie historii poleceń zapobiegnie przypadkowemu odtworzeniu dropDatabasepolecenia i niezamierzonemu upuszczeniu drugiej bazy danych.
Chris Allen Lane
3
To sprytny pomysł, @chrisallenlane. Powłoka mongodb jest czasami dość niebezpiecznym narzędziem ... :)
mnemosyn,
Ostrzeżenie: jeśli upuścisz bazę danych i utworzysz nową bazę danych o tej samej nazwie, musisz zrestartować wszystkie instancje mongo lub użyć komendy flushRouterConfig na wszystkich instancjach mongo przed odczytem lub zapisaniem do tej bazy danych. Ta akcja zapewnia, że ​​instancje mongo odświeżą swoją pamięć podręczną metadanych, w tym lokalizację podstawowego odłamka dla nowej bazy danych. W przeciwnym razie mongorze mogą pomijać dane podczas odczytu i mogą zapisywać dane w złym odłamku.
Lekr0
114

Znalazłem to łatwe do zapamiętania:

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
źródło
113

Nie potrzebujesz heredoków ani ewaluacji , mongosam może działać jako tłumacz.

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

Ustaw plik jako wykonywalny i uruchom go.

mikemaccana
źródło
3
Zauważ, że nazwa skryptu musi kończyć się .js, w przeciwnym razie będzie interpretowana jako adres db.
Vegard
1
@Vegard To nie jest poprawne. Pracujesz, mongo filenameco jest niepotrzebne - plik ma już interpreter w górnym wierszu. Po prostu zrób plik wykonywalny i uruchom go./filename
mikemaccana
@mikemaccana Wiem o tym, ale robienie ./filenamenaprawdę będzie działać /usr/bin/env mongo filename, prawda? Jeśli więc filenamesię nie skończy .py, mongo nie rozpozna argumentu jako skryptu do uruchomienia.
Vegard
„Wykonanie ./nazwa_pliku faktycznie uruchomi plik / usr / bin / env mongo, prawda?” Nie. Sprawdź wydajność ps.
mikemaccana
@mikemaccana Dane wyjściowe pspokazują tylko to, co jest uruchomione podczas wywoływania ps, a nie ciąg execwywołań prowadzących do tego punktu ani pracę, którą jądro wykonało, aby załadować i wykonać plik. Jeśli chcesz wiedzieć, co się naprawdę dzieje, powinieneś napisać wrapper /usr/bin/env, ustawić go jako plik wykonywalny w linii shebang, a następnie rozpocząć strace.
kbolino,
31

Uruchom MongoDB

Polecenie upuszczenia bazy danych to:

1. najpierw wybierz bazę danych, którą chcesz usunąć

use < database name >

2. Następnie użyj tego ..

db.dropDatabase()
bud-e
źródło
28

Możesz także użyć „heredoc”:

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

Wyniki wyjściowe, takie jak:

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

Lubię używać heredoków do takich rzeczy, na wypadek, gdybyś potrzebował bardziej złożonej sekwencji poleceń.

David
źródło
18

Inny sposób:

echo "db.dropDatabase()" | mongo <database name>
Gabriel Mancini
źródło
18

Oto niektóre operacje pełnego usuwania dla mongodb przy użyciu powłoki mongo

Aby usunąć określony dokument ze zbiorów:db.mycollection.remove( {name:"stack"} )

Aby usunąć wszystkie dokumenty ze zbiorów: db.mycollection.remove()

Aby usunąć kolekcję : db.mycollection.drop()

aby usunąć bazę danych : najpierw przejdź do tej bazy danych za pomocą use mydbpolecenia, a następnie

db.dropDatabase()

bezpośrednio z wiersza polecenia lub blash: mongo mydb --eval "db.dropDatabase()

bhv
źródło
15

Wykonaj w terminalu:

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
źródło
1
Ta sama odpowiedź jak ta , która została podana miesiąc wcześniej.
Dan Dascalescu,
10

Otwórz inne okno terminala i wykonaj następujące polecenia,

mongodb
use mydb
db.dropDatabase()

Wynik tej operacji powinien wyglądać następująco

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 }
>

Należy pamiętać, że mydbnadal jest w użyciu, dlatego wstawienie danych wejściowych w tym czasie spowoduje ponowne zainicjowanie bazy danych.

kod dostępu
źródło
4

Za pomocą Javascript możesz łatwo utworzyć skrypt drop_bad.js, aby usunąć bazę danych:

utwórz drop_bad.js :

use bad;
db.dropDatabase();

Następnie uruchom 1 polecenie w terminalu, aby wykonać skrypt za pomocą powłoki mongo:

mongo < drop_bad.js
sergiuz
źródło
2

Chociaż istnieje kilka metod, najlepszym sposobem (najbardziej wydajnym i najłatwiejszym) jest użycie db.dropDatabase()

Lakmal Vithanage
źródło
2

W wierszu polecenia najpierw połącz się z mongodb, używając następującego polecenia:

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

będziesz uzyskiwać dostęp do bazy danych za pomocą <dbname>.

Uruchom następujące polecenie, aby usunąć całą bazę danych:

db.dropDatabase()
TechGuy
źródło
-h jest pomocą, -d nie jest opcją bardziej podobną do `mongo --host [nazwa-hosta]: [port: numer] -u [nazwa użytkownika] -p [hasło] [nazwa_bazy] --eval" db.dropDatabase ( ) "'
jasenmichael
2

jeden liner zdalny usuwa wszystkie kolekcje z bazy danych mongo

Uwaga musi używać --host, (-h to pomoc dla polecenia mongo), a -d nie jest opcją, wybierz db i polecenie po haśle.

mongo --host <mongo_host>:<mongo_port> -u <db_user> -p <db_pass> <your_db> --eval "db.dropDatabase()"
jasenmichael
źródło
0

Zaloguj się do wiersza polecenia mongoDB: i wpisz poniższe polecenia. użyj „YOUR_DATABASE_NAME”; db.dropDatabase ();

Shrinivas Kalangutkar
źródło
0

Upuść bazę danych MongoDB, używając Pythona:

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
źródło
-1

db wyświetli bieżący typ nazwy bazy danych: db.dropDatabase ();

1- wybierz bazę danych do usunięcia za pomocą słowa kluczowego „ use ”.

2- następnie wpisz db.dropDatabase ();

nixxo_raa
źródło
-2

użyj następującego polecenia z powłoki mongo, aby usunąć db

posługiwać się ; db.dropDatabase ();

Anoop Sharma
źródło
w jaki sposób to polecenie określa, która baza danych ma zostać usunięta? Z bazy danych o nazwie „auth-użytkowników” Próbowałem > use auth-users ; db.dropDatabase()i > use auth-users; db.dropDatabase()i obaj wrócili[thread1] Error: [auth-users ; db.dropD atabase()] is not a valid database name :
Kennedy