Come posso eliminare un database MongoDB dalla riga di comando?


Risposte:


1084

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


Questo è stato molto utile nel mio caso. In qualche modo ho avuto un database chiamato "mean-dev" da un'installazione precedente, e inserendo "mean-dev.dropDatabase ()" nella shell mongo ho prodotto "ReferenceError: mean non definito". Ma usare la soluzione in questa risposta ha funzionato. +1
KP MacGregor,

22
Se vuoi ottenere un risultato leggibile dall'uomo, fallo in questo modo: mongo <dbname> --eval "printjson(db.dropDatabase())"
Dmytro Uhnichenko,

1
KP MacGregor. avresti dovuto essere: "usa mean-dev" + "db.dropDatabase ()"
ozma

Grazie. Ecco come personalizzare host e porta: mongo <yourDb> --host <yourHost> --port <yourPort> --eval 'db.dropDatabase()'
Clemens,

844

Il modo migliore per farlo è dalla console mongodb:

> use mydb; 
> db.dropDatabase();

In alternativa, è possibile interrompere mongoded 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.


2
Penso che significhi direttamente dal prompt vero? In tal caso, devi generare un file .js con quei comandi e richiamarlo dal prompt usando "mongo dropdb.js" o qualcosa del genere oppure fai come dici tu e rimuovi i file manualmente.
Remon van Vliet,

2
ma tieni presente che non puoi utilizzare il usecomando nel file .js, devi connetterti al DB concreto (specifica il nome db per il comando mongo)
Betlista,

46
Suggerimento pro: dopo aver eliminato un database, potresti voler uscire dalla shell mongo ed eliminare il ~/.dbshellfile 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 dropDatabasecomando e di eliminare involontariamente un secondo database.
Chris Allen Lane,

3
È un'idea intelligente, @chrisallenlane. La shell mongodb a volte è uno strumento abbastanza pericoloso ... :)
mnemosyn

Avviso: se si elimina un database e si crea un nuovo database con lo stesso nome, è necessario riavviare tutte le istanze di mongos oppure utilizzare il comando flushRouterConfig su tutte le istanze di mongos prima di leggere o scrivere su quel database. Questa azione garantisce che le istanze di mongos aggiornino la loro cache dei metadati, inclusa la posizione del frammento primario per il nuovo database. Altrimenti, i monghi potrebbero perdere i dati sulle letture e potrebbero scrivere i dati su un frammento sbagliato.
Lekr0

115

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 }

113

Non hai bisogno di heredocs o eval , esso mongostesso può agire da interprete.

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

Rendi eseguibile il file ed eseguilo.


3
Si noti che il nome dello script deve terminare .js, altrimenti verrà interpretato come indirizzo db.
Vegard

1
@Vegard Non è corretto. Stai eseguendo ciò mongo filenameche non è necessario: il file ha già un interprete nella riga superiore. ./filename
Rendi

@mikemaccana Lo so, ma ./filenameeffettivamente funzionerà /usr/bin/env mongo filename, giusto? E quindi se filenamenon finisce .py, mongo non riconoscerà l'argomento come uno script da eseguire.
Vegard

"Fare ./filename eseguirà effettivamente / usr / bin / env mongo nomefile, giusto?" No. Controllare l'uscita di ps.
mikemaccana,

@mikemaccana L'output di psmostra solo ciò che è in esecuzione al momento in cui si invoca ps, non la catena di execchiamate 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.
kbolino,

31

Avviare MongoDB

Il comando Drop for Database è:

1. selezionare innanzitutto il database che si desidera eliminare

use < database name >

2. Quindi usa questo ..

db.dropDatabase()

28

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.


19

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 mydbcomando e poi

db.dropDatabase()

direttamente dal prompt dei comandi o dal blash: mongo mydb --eval "db.dropDatabase()



15

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.

1
Stessa risposta a questa , che è stata data un mese prima.
Dan Dascalescu,

10

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.


4

Utilizzando Javascript, puoi facilmente creare uno script drop_bad.js per eliminare il tuo database:

creare drop_bad.js :

use bad;
db.dropDatabase();

Quindi esegui 1 comando nel terminale per eseguire lo script usando la shell mongo:

mongo < drop_bad.js

2

Anche se ci sono diversi metodi, sta usando il modo migliore (più efficiente e più semplice) db.dropDatabase()


2

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

-h è di aiuto, -d non è un'opzione più simile a `mongo --host [nome-host]: [port: numero] -u [nome utente] -p [password] [dbname] --eval" db.dropDatabase ( ) "`
jasenmichael,

2

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

0

Accedi alla tua riga di comando mongoDB: e digita i comandi seguenti. usa "YOUR_DATABASE_NAME"; db.dropDatabase ();


0

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

-1

db mostrerà l'attuale tipo di nome del database: db.dropDatabase ();

1- selezionare il database da eliminare utilizzando la parola chiave " usa ".

2- quindi digitare db.dropDatabase ();


-2

usa il seguente comando dalla shell mongo per eliminare db

uso ; db.dropDatabase ();


in che modo questo comando specifica quale database eliminare? Con un database chiamato "auth-utenti" Ho provato > 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 :
Mr. Kennedy
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.