2010-07-29 27 views
363

Estoy haciendo desarrollo en MongoDB. Para fines totalmente no malvados, a veces quiero deshacerme de todo en una base de datos, es decir, eliminar cada colección y cualquier otra cosa que pueda existir, y empezar de cero. ¿Hay una sola línea de código que me permita hacer esto? Puntos de bonificación por dar tanto un método de consola MongoDB como un método de controlador MongoDB Ruby.Borrar todo en una base de datos MongoDB

Respuesta

492

En la consola mongo:

use [database]; 
db.dropDatabase(); 

Ruby code is pretty similar.

+34

Nota : Esto no eliminará la base de datos, solo todos sus contenidos. – connorbode

+13

@connorbode Gracias por esto. Lo he leído y de inmediato: ** "B-Pero OP no quiere eliminar la base de datos!" **. Comando muy engañoso !! –

+0

Usar con precaución: si se encuentra en un entorno fragmentado utilizando wiredTiger y no tiene una base de datos de usuario e invoca dropDatabase, la base de datos se eliminará y podría volver a aparecer como primaria en un fragmento diferente cuando se agreguen nuevos registros. –

98

Asimismo, desde la línea de comandos:

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

No creo que esto funcione en 2.4.6. Mis registros aún existen. –

8

Uso

[databaseName] 
db.Drop+databaseName(); 

drop collection 

use databaseName 
db.collectionName.drop(); 
9

escuchan son algunos pleno uso operaciones de borrado para mongodb utilizando consola mongo

Para eliminar documento en particular en las colecciones: db.mycollection.remove({name:"stack"})

Para eliminar todos los documentos en las colecciones: db.mycollection.remove()

Para eliminar la colección: db.mycollection.drop()

para eliminar la base de datos: primera ir a la base de datos use mydb comando y luego

db.dropDatabase() 
48

que tenía el mismo problema, cuando necesitaba para restablecer todas las colecciones pero no quería perder ningún usuario de la base de datos. Utilice la siguiente línea de código, si desea guardar la configuración de usuario para la base de datos:

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

Este código va a ir a través de todos los nombres de colección de una base de datos y soltar los que no comienzan con "sistema". .

+2

Según lo mencionado por @DanH, puede que le resulte más confiable usar 'remove' en lugar de' drop'. La opción 'eliminar' parece mantener restricciones en los campos de las colecciones que está borrando. Cuando empleamos el método 'drop', la restricción' unique' en uno de nuestros campos no se respetó después de la caída. – Scottymac

+0

@Scottymac - mejor aún, agregue una rama 'else' (al' if (c.indexOf ("system.") == -1) ') que hace' remove' en lugar de 'drop'. De esta forma, no te quedarán colecciones vacías si ya no las usas –

+0

Mejor que 'db [c]', utiliza 'db.getCollection (c)' que evita [errores cuando los nombres de las colecciones son dígitos] (http: //stackoverflow.com/a/24657123/70170). –

4

si desea eliminar sólo una base de datos y sus sub-colecciones utilizan este:

  • use <database name>;
  • db.dropDatabase();

si desea borrar todas las bases de datos en mongo a continuación, utilizar este :

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

Gran respuesta ... esto es probablemente lo que el usuario quería llegar – robert

27

Seguí elSin embargo, si intenta utilizar esto para borrar la base de datos entre casos de prueba, es posible que finalmente encuentre problemas con las restricciones de índice que no se cumplen después de la caída de la base de datos.Como resultado, ya sea que usted necesita para enredar con ensureIndexes, o una ruta más simple sería evitar la dropDatabase alltogether y simplemente eliminar de cada colección en un bucle, tales como:

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

En mi caso yo estaba corriendo esto desde la línea de comandos usando:

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

Gracias por esta sugerencia, estábamos usando' db [COLLECTION_NAME] .drop() 'y fue exhibiendo los mismos problemas que describiste con el método 'db.dropDatabase()'. Cambiar el 's/drop/remove /' funcionó brillantemente! – Scottymac

+4

Descubrí que 'remove()' no funciona bien en MongoDB para Windows, y en su lugar tenía que hacer 'remove ({})' que funciona tanto en OSX como en Windows. – DanH

+0

Gracias por el consejo, estamos en una plataforma Linux, pero vale la pena investigar un poco más. – Scottymac

13

al recopilar respuestas de @Robse y @DanH (!) felicitaciones, tengo la solución después de lo cual me satisface por completo:

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

Conéctese a su base de datos, ejecute el código.

Limpia la base de datos al eliminar las colecciones de usuarios y vaciar las colecciones del sistema.

+0

Esto funciona bastante bien. Exactamente lo que necesitaba. –

1

forma más sencilla de eliminar una base de datos dicen blog:

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

Para los desarrolladores de meteoros.

  1. Abrir una segunda ventana de terminal mientras se ejecuta la aplicación en localhost:3000.

  2. En la carpeta de su proyecto, ejecute meteor mongo.

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

  3. entonces simplemente entre db.yourCollectionName.drop();

  4. Verás automáticamente los cambios en el servidor local.

Para todos los demás.

db.yourCollectionName.drop();

0

Para eliminar todos los DBs de usar:

for i in $(mongo --quiet --host $HOSTNAME --eval "db.getMongo().getDBNames()" | tr "," " "); 

do mongo $i --host $HOSTNAME --eval "db.dropDatabase()"; 

done 
0
use <dbname> 
db.dropAllUsers() 
db.dropAllRoles() 
db.dropDatabase() 

MongoDB db.dropDatabase() documentation explicar la modificación introducida en el apartado 2.6:

cambiado en la versión 2.6: Este comando no elimina los usuarios asociados con la base de datos actual.

1
  1. Haz una lista de todos los DBS disponibles muestran DBS
  2. Elija la necesaria db uso
  3. gota la base de datos db.dropDatabase() // pocos comandos adicionales
  4. Lista de todas las colecciones disponibles en una base de datos muestran colecciones
  5. Eliminar una colección especificación db.collection.drop()

Espero que ayude

Cuestiones relacionadas