Eliminar todo en una base de datos MongoDB

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.

En el caparazón de mongo:

use [database]; db.dropDatabase(); 

El código de Ruby es bastante similar .

Además, desde la línea de comando:

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

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

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

Este código pasará por todos los nombres de colecciones de una base de datos y descartará aquellos que no comiencen con “sistema”.

Seguí la ruta db.dropDatabase() durante mucho tiempo; sin embargo, si está intentando usar esto para borrar la base de datos entre casos de prueba, eventualmente puede encontrar problemas con restricciones de índice que no se respetan después de la caída de la base de datos. Como resultado, tendrá que preocuparse con EnsureIndexes, o una ruta más simple sería evitar juntar la base de datos dropData y simplemente eliminar de cada colección en un bucle como:

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

En mi caso, estaba ejecutando esto desde la línea de comandos usando:

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

Al comstackr las respuestas de @Robse y @DanH (¡felicitaciones!), Tengo la siguiente solución que 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.

Escuche son algunas operaciones de eliminación completa de uso para mongodb usando mongo shell

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

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

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

para borrar la base de datos: primero ve a esa base de datos use mydb comando use mydb y luego

 db.dropDatabase() 

Utilizar

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

si desea eliminar solo una base de datos y sus subcolecciones, use esto:

  • use ;
  • db.dropDatabase();

si quieres eliminar todas las bases de datos en mongo, utiliza esto:

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

La forma más simple de borrar una base de datos es blog:

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

Para los desarrolladores de Meteor.

  1. Abra una segunda ventana de terminal mientras ejecuta su aplicación en localhost:3000 .

  2. En la carpeta de tu proyecto, meteor mongo .

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

  3. Luego simplemente ingrese db.yourCollectionName.drop();

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

Para todos los demás.

db.yourCollectionName.drop();

  1. Enumerar todos los dbs disponibles mostrar dbs
  2. Elija el uso de db necesario
  3. Suelta la base de datos db.dropDatabase () // Pocos comandos adicionales
  4. Listar todas las colecciones disponibles en un db show collections
  5. Eliminar una colección de especificaciones db.collection.drop ()

Espero que ayude

Para eliminar todos los DB use:

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

Documentación de MongoDB db.dropDatabase () que explica la modificación introducida en 2.6:

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

yo prefiero

 db.your_collection.remove({}) 

encima

 db.your_collection.drop() 

Si su colección era una colección especial, es decir, una colección con el tope o una colección con un campo marcado como único, la eliminación borrará la colección en sí y cuando se vuelva a crear la colección será una colección ordinaria. Deberá definir las propiedades nuevamente. Por lo tanto, use remove() para borrar los documentos sin eliminar la colección y afectar el comportamiento de la colección.

En MongoDB 3.2 y posterior, Mongo().getDBNames() en mongo shell generará una lista de nombres de bases de datos en el servidor:

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

Un forEach() sobre la matriz podría llamar a dropDatabase() para descartar todas las bases de datos enumeradas. Opcionalmente, puede optar por omitir algunas bases de datos importantes que no desea descartar. Por ejemplo:

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

Ejecución de ejemplo:

 > 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