web-dev-qa-db-fra.com

Supprimer tout dans une base de données MongoDB

Je fais du développement sur MongoDB. Pour des raisons totalement non perverses, je veux parfois détruire tout ce qui se trouve dans une base de données, c'est-à-dire supprimer chaque collection, ainsi que tout ce qui pourrait traîner et repartir à zéro. Existe-t-il une seule ligne de code qui me permettra de le faire? Points bonus pour donner à la fois une méthode de console MongoDB et une méthode de pilote MongoDB Ruby.

404
Trevor Burnham

Dans le shell mongo:

use [database];
db.dropDatabase();

Le code Ruby est assez similaire .

544
Josh K

En outre, à partir de la ligne de commande:

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

J'ai eu le même problème lorsque j'ai eu besoin de réinitialiser toutes les collections, mais je ne voulais pas perdre d'utilisateurs de la base de données. Utilisez la ligne de code suivante si vous souhaitez enregistrer la configuration de l'utilisateur pour la base de données:

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

Ce code parcourt tous les noms de collection d'une base de données et supprime ceux qui ne commencent pas par "système".

57
Robse

J'ai suivi la route db.dropDatabase() pendant longtemps; toutefois, si vous essayez de l'utiliser pour effacer la base de données entre deux scénarios de test, vous risquez éventuellement de rencontrer des problèmes de non-respect des contraintes d'index après la suppression de la base de données. En conséquence, vous devrez soit vous préoccuper de la valeur de EnsureIndexes, soit utiliser une route plus simple, qui consiste à éviter complètement dropDatabase et à simplement supprimer de chaque collection dans une boucle telle que:

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

Dans mon cas, je courais ceci à partir de la ligne de commande en utilisant:

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

En compilant les réponses de @Robse et @DanH (félicitations!), J'ai la solution suivante qui me satisfait complètement:

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

Connectez-vous à votre base de données, exécutez le code. 

Il nettoie la base de données en supprimant les collections d'utilisateurs et en vidant les collections du système.

14
Bogdan D

Écoutez quelques opérations d’utilisation complète de suppression pour mongodb à l’aide de mongo Shell

Pour supprimer un document particulier dans des collections: db.mycollection.remove( {name:"stack"} )

Pour supprimer tous les documents des collections: db.mycollection.remove()

Pour supprimer une collection: db.mycollection.drop()

supprimer la base de données: D'abord, allez dans cette base de données avec la commande use mydb puis 

db.dropDatabase()
9
bhv

Utilisation 

[databaseName]
db.Drop+databaseName();

drop collection 

use databaseName 
db.collectionName.drop();
8
Mohamed El Gamal

Je préfère

db.your_collection.remove({})

plus de

db.your_collection.drop()

Si votre collection était une collection spéciale C'est-à-dire une collection plafonnée ou une collection avec un champ marqué comme unique, supprimer supprimera la collection elle-même et, lorsque la collection sera à nouveau créée, ce sera une collection ordinaire. Vous devrez définir à nouveau les propriétés . Utilisez donc remove() pour effacer les documents sans supprimer la collection et affecter le comportement de la collection.

1
Sreeragh A R
  1. Listez tous les dbsshow dbs disponibles
  2. Choisissez la base de données nécessaire utilisation 
  3. Supprimer la base de données db.dropDatabase () // Peu de commandes supplémentaires
  4. Lister toutes les collections disponibles dans une collection dbshow
  5. Supprimer une collection de spécifications Db.collection.drop ()

J'espère que cela pourra aider

1
priya raj

Le moyen le plus simple de supprimer une base de données, par exemple un blog:

> use blog
switched to db blog
> db.dropDatabase();
{ "dropped" : "blog", "ok" : 1 }
1
Shalabh Raizada
db.getCollectionNames().forEach(c=>db[c].drop())
0

Pour supprimer toutes les bases de données, utilisez:

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

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

done 
0
Zaur

au cas où vous auriez besoin de tout supprimer en une fois: (supprimez toutes les bases de données en même temps)

mongo --quiet --eval 'db.getMongo().getDBNames().forEach(function(i){db.getSiblingDB(i).dropDatabase()})'
0
sjas
use <dbname>
db.dropAllUsers()
db.dropAllRoles()
db.dropDatabase()

Documentation MongoDB db.dropDatabase () expliquant la modification introduite en 2.6:

Modifié dans la version 2.6: Cette commande ne supprime pas les utilisateurs associés à la base de données actuelle.

0
Antonio Bardazzi

Dans MongoDB 3.2 et versions ultérieures, Mongo().getDBNames() dans mongo Shell générera une liste de noms de bases de données sur le serveur:

> Mongo().getDBNames()
[ "local", "test", "test2", "test3" ]

> show dbs
local  0.000GB
test   0.000GB
test2  0.000GB
test3  0.000GB

Une boucle forEach() sur le tableau peut ensuite appeler dropDatabase() pour supprimer toutes les bases de données répertoriées. Vous pouvez également choisir d'ignorer certaines bases de données importantes que vous ne souhaitez pas supprimer. Par exemple:

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

Exemple d'exécution:

> 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
0
Kevin Adistambha