Elimina tutto in un database MongoDB

Sto facendo lo sviluppo su MongoDB. Per scopi totalmente non-cattivi, a volte voglio eliminare tutto in un database, cioè eliminare ogni singola raccolta e qualsiasi altra cosa possa trovarsi in giro e ricominciare da capo. C’è una sola riga di codice che mi permetterà di fare questo? Punti bonus per dare sia un metodo console MongoDB che un metodo driver Ruby MongoDB.

Nel guscio dei mongo:

use [database]; db.dropDatabase(); 

Il codice ruby è piuttosto simile .

Inoltre, dalla riga di comando:

 mongo DATABASE_NAME --eval "db.dropDatabase();" 

Ho avuto lo stesso problema, quando ho avuto bisogno di ripristinare tutte le collezioni ma non volevo perdere nessuno degli utenti del database. Utilizzare la seguente riga di codice, se si desidera salvare la configurazione utente per il database:

 use  db.getCollectionNames().forEach(function(c) { if (c.indexOf("system.") == -1) db[c].drop(); }) 

Questo codice passerà attraverso tutti i nomi delle collezioni da un database e eliminerà quelli che non iniziano con “sistema”.

Ho seguito la rotta db.dropDatabase() per un lungo periodo, tuttavia se stai cercando di usarlo per cancellare il database tra un test e l’altro, potresti trovare dei problemi con i vincoli dell’indice che non vengono rispettati dopo la caduta del database. Di conseguenza, o dovrai fare confusione con ensureIndexes, o un percorso più semplice sarebbe evitare tutto il dropDatabase e solo rimuovere da ogni raccolta in un ciclo come:

 db.getCollectionNames().forEach( function(collection_name) { db[collection_name].remove() } ); 

Nel mio caso stavo eseguendo questo dalla riga di comando utilizzando:

 mongo [database] --eval "db.getCollectionNames().forEach(function(n){db[n].remove()});" 

Compilando le risposte di @Robse e @DanH (kudos!), Ho la seguente soluzione che mi soddisfa completamente:

 db.getCollectionNames().forEach( function(collection_name) { if (collection_name.indexOf("system.") == -1) db[collection_name].drop(); else db.collection_name.remove({}); }); 

Collegati al tuo database, esegui il codice.

Pulisce il database eliminando le raccolte di utenti e svuotando le raccolte di sistema.

Si sentono alcune operazioni di cancellazione completa per mongodb usando la shell mongo

Per eliminare un determinato 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 a quel database use mydb comando use mydb e poi

 db.dropDatabase() 

Uso

 [databaseName] db.Drop+databaseName(); drop collection use databaseName db.collectionName.drop(); 

se si desidera eliminare solo un database e le sue sotto-raccolte utilizzare questo:

  • use ;
  • db.dropDatabase();

se vuoi cancellare tutti i database in mongo, usa questo:

 db.adminCommand("listDatabases").databases.forEach(function(d) { if(d.name!="admin" && d.name!="local" && d.name!="config") { db.getSiblingDB(d.name).dropDatabase(); } } ); 

Il modo più semplice per cancellare un database dice blog:

 > use blog switched to db blog > db.dropDatabase(); { "dropped" : "blog", "ok" : 1 } 

Per gli sviluppatori di Meteor.

  1. Apri una seconda finestra di terminale mentre esegui la tua app in localhost:3000 .

  2. Esegui la cartella del progetto, meteor mongo .

    coolName = new Mongo.Collection('yourCollectionName');

  3. Quindi inserisci semplicemente db.yourCollectionName.drop();

  4. Vedrai automaticamente le modifiche nel tuo server locale.

Per tutti gli altri

db.yourCollectionName.drop();

  1. Elenca tutti i dbs disponibili mostra dbs
  2. Scegli l’uso db necessario
  3. Rilascia il database db.dropDatabase () // Pochi comandi aggiuntivi
  4. Elenca tutte le raccolte disponibili in collezioni db show
  5. Rimuovere una raccolta di specifiche db.collection.drop ()

Spero possa aiutare

Per cancellare tutti i DB utilizzare:

 for i in $(mongo --quiet --host $HOSTNAME --eval "db.getMongo().getDBNames()" | tr "," " "); do mongo $i --host $HOSTNAME --eval "db.dropDatabase()"; done 
 use  db.dropAllUsers() db.dropAllRoles() db.dropDatabase() 

Documentazione di MongoDB db.dropDatabase () che spiega la modifica introdotta in 2.6:

Modificato nella versione 2.6: questo comando non cancella gli utenti associati al database corrente.

preferisco

 db.your_collection.remove({}) 

al di sopra di

 db.your_collection.drop() 

Se la tua collezione è stata una collezione speciale, ad esempio una collezione limitata o una raccolta con un campo contrassegnato come univoco, il dropping cancellerà la raccolta stessa e quando la raccolta verrà nuovamente creata sarà una raccolta ordinaria. Dovrai definire nuovamente le proprietà. Quindi usa remove() per cancellare i documenti senza rimuovere la raccolta e influenzando il comportamento della raccolta.

In MongoDB 3.2 e Mongo().getDBNames() successive, Mongo().getDBNames() nella shell mongo produrrà un elenco di nomi di database nel server:

 > Mongo().getDBNames() [ "local", "test", "test2", "test3" ] > show dbs local 0.000GB test 0.000GB test2 0.000GB test3 0.000GB 

Un ciclo forEach() sull’array potrebbe quindi chiamare dropDatabase() per eliminare tutti i database elencati. Opzionalmente puoi scegliere di saltare alcuni database importanti che non vuoi eliminare. Per esempio:

 Mongo().getDBNames().forEach(function(x) { // Loop through all database names if (['admin', 'config', 'local'].indexOf(x) < 0) { // Drop if database is not admin, config, or local Mongo().getDB(x).dropDatabase(); } }) 

Esempio di esecuzione:

 > show dbs admin 0.000GB config 0.000GB local 0.000GB test 0.000GB test2 0.000GB test3 0.000GB > Mongo().getDBNames().forEach(function(x) { ... if (['admin', 'config', 'local'].indexOf(x) < 0) { ... Mongo().getDB(x).dropDatabase(); ... } ... }) > show dbs admin 0.000GB config 0.000GB local 0.000GB