2011-06-16 22 views
68

Me gustaría saber si hay un comando para eliminar todas las bases de datos de mi MongoDB?MongoDB soltar todas las bases de datos

Sé que si quiero eliminar solo una tabla de datos, solo tengo que escribir el nombre de la base de datos como el siguiente código, pero no quiero tener que especificarlo.

mongo DB_NAME --eval 'db.dropDatabase();' 

Respuesta

108

puede crear un bucle javascript que hacer el trabajo y luego ejecutarlo en el mongoconsole.

var dbs = db.getMongo().getDBNames() 
for(var i in dbs){ 
    db = db.getMongo().getDB(dbs[i]); 
    print("dropping db " + db.getName()); 
    db.dropDatabase(); 
} 

guardarlo a dropall.js y luego ejecutar:

mongo dropall.js 
+12

'var mongo = db.getMongo(); mongo.getDBNames() forEach (function (dbname) {var = db mongo.getDB (dbname); db.dropDatabase(); });. – tjmehta

+0

'También puede simplemente copiar y pegar el código anterior y escriba en consola mongo. –

+1

Esto colisionó las bases de datos de mi sistema (Mongo versión 2.4.3). Tuve que reiniciar el proceso de mongodb para que funcione nuevamente. –

4

Puede hacerlo fácil a través de piloto oficial de C#:

var _mongoServer = MongoServer.Create("mongodb://localhost:27020"); 

var names = _mongoServer.GetDatabaseNames(); 
foreach (var name in names) 
{ 
    _mongoServer.DropDatabase(name); 
} 
+0

sí que podría ser una buena idea, pero quiero hacerlo sin C#. (Perdón, utilicé la etiqueta C# para esta pregunta) – Gui

+0

puede crear un bucle javascript que haga el trabajo y luego ejecutarlo en la mongoconsole. – ALoR

+2

@AndrewOrsich y @JohnSmith publiqué el guión. – ALoR

11

También puede hacer esto con un simple comando de mongo:

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

Agregando a @ respuesta de Alor, por conveniencia puede poner lo siguiente en ~/.mongorc.js

function dropDatabases(){ 
    var mongo = db.getMongo(); 

    var dbNames = mongo.getDBNames(); 
    for (var i = 0; i < dbNames.length; i++) { 
     var db = mongo.getDB(dbNames[i]); 

     print("Dropping database " + db.getName() + "..."); 
     db.dropDatabase(); 
    } 
} 

Luego, a los mongo shell puede simplemente hacer

dropDatabases() 

A partir de los documentos:

Mongo leerá el archivo .mongorc.js desde el directorio principal del mongo invocando usuario. En el archivo, los usuarios pueden definir variables, personalizar el indicador de shell de mongo o actualizar la información que les gustaría actualizar cada vez que inician un shell.

+0

Para mí, esto no funcionó. Lo arreglé agregando el fol – titusmagnus

+0

He hecho actualizaciones para corregir los problemas. Gracias por entrar! – btiernay

68

Prueba este comando:

mongo --quiet --eval 'db.getMongo().getDBNames().forEach(function(i){db.getSiblingDB(i).dropDatabase()})' 
+1

Funciona muy bien, y no es necesario crear un archivo js para ello. Bonito. –

+0

¿Qué es la simétrica para cargarlo? – nha

+0

Un problema con este enfoque que acabo de encontrar es que el db var persiste a través de las sesiones de consola de mongo, por lo que si alguien interactúa con una de las bases de datos, se excluiría mediante la llamada a db.getSiblingDB. –

1

Guardar este a drop_all_dbs.js:

var databases = db.getMongo().getDBNames() 
for(var i in databases){ 
    db = db.getMongo().getDB(databases[i]); 
    if(db.getName() == "admin" || db.getName() == "local"){ 
     print("skipping db " + db.getName()) 
     continue 
    } 
    print("dropping db " + db.getName()); 
    db.dropDatabase(); 
} 

Ahora se puede ejecutar:

mongo drop_all_dbs.js 

y todas las bases de datos (excepto para admin y local) se eliminarán.

Esta respuesta es una copia de uno de Alor, simplemente fijar gota de DBS sistema

Cuestiones relacionadas