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


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


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.


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 }

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.


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

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ń.



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


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.

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.


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

2

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


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

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

0

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


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

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


-2

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

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


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.