MongoDB elimina todas las bases de datos


97

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

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

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

Respuestas:


142

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

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

guárdelo en dropall.js y luego ejecute:

mongo dropall.js

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

3
También puede copiar y pegar el código anterior y escribirlo en la consola de mongo.
Vivek Pandey

2
Esto eliminó las bases de datos de mi sistema (Mongo Versión 2.4.3). Tuve que reiniciar el proceso de mongodb para que funcione nuevamente.
Felix Schmidt

7
Creo que cuando alguien quiere eliminar sus bases de datos, no quiere eliminar las bases de datos internas de mongo como admin y local.
carlin.scott

Además, la base de datos de configuración, donde se almacenan las transacciones.
Rodrigo Pereira Fraga

103

Prueba este comando:

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

1
Funciona muy bien y no tiene que crear un archivo js para ello. Agradable.
Erik Honn

¿Cuál es la simétrica para cargarlo?
nha

Un problema con este enfoque que acabo de encontrar es que db var persiste a través de las sesiones de la consola de mongo, por lo que si alguien estaba interactuando con una de las bases de datos, la llamada db.getSiblingDB lo excluiría.
carlin.scott

3
Agradable. Esto es perfecto para Docker: Ddocker exec mongodb sh -c "mongo --quiet --eval 'db.getMongo().getDBNames().forEach(function(i){db.getSiblingDB(i).dropDatabase()})'"
perezmlal

Pasé por el mismo problema y descubrí que esta es la mejor solución para las tareas de automatización. No está ansioso por escribir archivos nuevos y descargarlos en una canalización de CI / CD, por lo que un script de una sola línea es muy simple de administrar
Carmine Ingaldi

21

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

En lugar de escribir la condición if para cada DB, podemos simplemente poner en una matriz y hacer un indexOf.
Sachin Gupta

5

Agregando a la respuesta de @ ALoR, para mayor comodidad, 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, en el caparazón de mongo, simplemente puedes hacer

dropDatabases()

De los documentos:

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


He realizado actualizaciones para corregir los problemas. ¡Gracias por participar!
btiernay

5

Guarde esto en 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 puedes ejecutar:

mongo drop_all_dbs.js

y todas las bases de datos (excepto las de administración y local) se eliminarán.

Esta respuesta es una copia de la de ALoR, solo corrige la caída de la base de datos del sistema


4

Puede hacerlo fácilmente a través del controlador oficial de c #:

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

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

sí, podría ser una idea, pero quiero hacerlo sin C #. (Lo siento, utilicé la etiqueta C # para esta pregunta)
John

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

2
@AndrewOrsich y @JohnSmith he publicado el guión.
ALoR

1

var mongo = db.getMongo(); mongo.getDBNames().filter(n => n != 'admin' && n != 'local' && n != 'config').forEach(function (dbname) { var db = mongo.getDB(dbname); db.dropDatabase(); });

Este es seguro para copiar y ejecutar en mongoshell. Créditos a todas las respuestas anteriores. Simplemente excluya la base de datos 'config' también.


-2

Es tan fácil como

mongo --eval 'db.dropDatabase()'

O puede iniciar una sesión de mongo en su terminal y escribir

db.dropDatabase()

Que es exactamente lo mismo.


La pregunta es cómo eliminar todas las bases de datos, no una individual
Rob H
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.