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();'
Juan
fuente

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
ALoR
fuente
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()})'
kev
fuente
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();
 })
Andreas
fuente
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.

btiernay
fuente
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

Gas
fuente
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);
}
Andrew Orsich
fuente
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.

vu le
fuente
-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.

Plaza Pedro José Piquero
fuente
La pregunta es cómo eliminar todas las bases de datos, no una individual
Rob H