Jaki jest najłatwiejszy sposób na zrobienie tego z mojego monitu bash?
Jaki jest najłatwiejszy sposób na zrobienie tego z mojego monitu bash?
Odpowiedzi:
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
mongo <dbname> --eval "printjson(db.dropDatabase())"
mongo <yourDb> --host <yourHost> --port <yourPort> --eval 'db.dropDatabase()'
Najlepszym sposobem na to jest z konsoli mongodb:
> use mydb;
> db.dropDatabase();
Możesz też zatrzymać mongod
i 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.
use
polecenia w pliku .js, musisz połączyć się z konkretnym DB (podaj nazwę
~/.dbshell
plik, 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 dropDatabase
polecenia i niezamierzonemu upuszczeniu drugiej bazy danych.
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 }
Nie potrzebujesz heredoków ani ewaluacji , mongo
sam 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.
.js
, w przeciwnym razie będzie interpretowana jako adres db.
mongo filename
co jest niepotrzebne - plik ma już interpreter w górnym wierszu. Po prostu zrób plik wykonywalny i uruchom go./filename
./filename
naprawdę będzie działać /usr/bin/env mongo filename
, prawda? Jeśli więc filename
się nie skończy .py
, mongo nie rozpozna argumentu jako skryptu do uruchomienia.
ps
.
ps
pokazują tylko to, co jest uruchomione podczas wywoływania ps
, a nie ciąg exec
wywoł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
.
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ń.
Inny sposób:
echo "db.dropDatabase()" | mongo <database name>
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 mydb
polecenia, a następnie
db.dropDatabase()
bezpośrednio z wiersza polecenia lub blash: mongo mydb --eval "db.dropDatabase()
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.
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 mydb
nadal jest w użyciu, dlatego wstawienie danych wejściowych w tym czasie spowoduje ponowne zainicjowanie bazy danych.
Chociaż istnieje kilka metod, najlepszym sposobem (najbardziej wydajnym i najłatwiejszym) jest użycie db.dropDatabase()
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()
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()"
Zaloguj się do wiersza polecenia mongoDB: i wpisz poniższe polecenia. użyj „YOUR_DATABASE_NAME”; db.dropDatabase ();
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")
użyj następującego polecenia z powłoki mongo, aby usunąć db
posługiwać się ; db.dropDatabase ();
> 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 :