Qual è il modo più semplice per farlo dal mio prompt di bash?
Qual è il modo più semplice per farlo dal mio prompt di bash?
Risposte:
Come questo:
mongo <dbname> --eval "db.dropDatabase()"
Maggiori informazioni sullo scripting della shell dalla riga di comando qui: 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()'
Il modo migliore per farlo è dalla console mongodb:
> use mydb;
> db.dropDatabase();
In alternativa, è possibile interrompere mongod
ed eliminare i file di dati dalla directory dei dati, quindi riavviare.
Suggerimento: puoi anche spostare i file di dati in una sottocartella ed eliminarli se sei sicuro di non averne più bisogno.
use
comando nel file .js, devi connetterti al DB concreto (specifica il nome db per il comando mongo)
~/.dbshell
file per cancellare la cronologia dei comandi. (Potrebbe esserci un modo migliore per farlo - non ne sono sicuro.) Lo faccio perché, a differenza di SQL, il comando mongo per eliminare un database in realtà non fa riferimento al nome del database da rilasciare , ma rilascia semplicemente il database a cui è attualmente connesso il client. La cancellazione della cronologia dei comandi impedirà di riprodurre accidentalmente il dropDatabase
comando e di eliminare involontariamente un secondo database.
Ho trovato questo facile da ricordare:
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 }
Non hai bisogno di heredocs o eval , esso mongo
stesso può agire da interprete.
#!/usr/bin/env mongo
var db = new Mongo().getDB("someDatabase");
db.dropDatabase();
Rendi eseguibile il file ed eseguilo.
.js
, altrimenti verrà interpretato come indirizzo db.
mongo filename
che non è necessario: il file ha già un interprete nella riga superiore. ./filename
./filename
effettivamente funzionerà /usr/bin/env mongo filename
, giusto? E quindi se filename
non finisce .py
, mongo non riconoscerà l'argomento come uno script da eseguire.
ps
.
ps
mostra solo ciò che è in esecuzione al momento in cui si invoca ps
, non la catena di exec
chiamate che portano a quel punto né il lavoro svolto dal kernel per caricare ed eseguire il file. Se vuoi sapere cosa sta realmente succedendo, dovresti usare un wrapper /usr/bin/env
, impostarlo come eseguibile nella linea shebang e quindi dare il via a tutto strace
.
Puoi anche usare un "heredoc":
mongo localhost/db <<EOF
db.dropDatabase()
EOF
Risultati in output come:
mongo localhost/db <<EOF
db.dropDatabase()
EOF
MongoDB shell version: 2.2.2
connecting to: localhost/db
{ "dropped" : "db", "ok" : 1 }
bye
Mi piace usare heredocs per cose come questa, nel caso tu voglia una sequenza di comandi più complessa.
Qui ci sono alcune operazioni di eliminazione completa per mongodb usando mongo shell
Per eliminare un particolare documento nelle raccolte:db.mycollection.remove( {name:"stack"} )
Per eliminare tutti i documenti nelle raccolte: db.mycollection.remove()
Per eliminare la raccolta : db.mycollection.drop()
per cancellare il database : prima vai su quel database con il use mydb
comando e poi
db.dropDatabase()
direttamente dal prompt dei comandi o dal blash: mongo mydb --eval "db.dropDatabase()
Altro modo:
echo "db.dropDatabase()" | mongo <database name>
Eseguire in un terminale:
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.
Apri un'altra finestra del terminale ed esegui i seguenti comandi,
mongodb
use mydb
db.dropDatabase()
Il risultato di tale operazione sarà simile al seguente
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 }
>
Si noti che mydb
è ancora in uso, quindi l'inserimento di qualsiasi input in quel momento inizializzerà nuovamente il database.
Anche se ci sono diversi metodi, sta usando il modo migliore (più efficiente e più semplice) db.dropDatabase()
Nel prompt dei comandi, innanzitutto connettersi a mongodb utilizzando il comando seguente:
mongo -h [host-name]:[port:number] -d [dbname] -u [username] -p [password]
accederai a db con <dbname>
.
Eseguire il comando seguente per eliminare l'intero database:
db.dropDatabase()
un liner remoto rimuove tutte le raccolte dal database mongo
nota deve usare --host, (-h è di aiuto per il comando mongo) e -d non è un'opzione, selezionare il db e il comando dopo la password.
mongo --host <mongo_host>:<mongo_port> -u <db_user> -p <db_pass> <your_db> --eval "db.dropDatabase()"
Accedi alla tua riga di comando mongoDB: e digita i comandi seguenti. usa "YOUR_DATABASE_NAME"; db.dropDatabase ();
Rilascia un database MongoDB usando 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")
usa il seguente comando dalla shell mongo per eliminare db
uso ; db.dropDatabase ();
> use auth-users ; db.dropDatabase()
e > use auth-users; db.dropDatabase()
ed entrambe tornato[thread1] Error: [auth-users ; db.dropD atabase()] is not a valid database name :