Supprimer tout dans une base de données MongoDB
Je suis en train de faire du développement sur MongoDB. Pour totalement non-objectifs mal, j'ai parfois envie de souffler le tout dans une base de données—qui est, pour supprimer chaque collection, et tout autre chose qui pourrait être traînent, et commencer à partir de zéro. Est-il une seule ligne de code qui me permettra de faire cela? Les points Bonus pour donner une MongoDB console méthode et un MongoDB Ruby pilote de méthode.
Vous devez vous connecter pour publier un commentaire.
Dans le shell mongo:
Code Ruby est assez similaire.
db.dropAllUsers();
show dbs
Aussi, à partir de la ligne de commande:
J'ai eu le même problème, lorsque j'ai dû réinitialiser toutes les collections, mais ne veulent pas perdre tous les utilisateurs de 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:
Ce code va passer par tous les noms des collections à partir d'une base de données et de laisser tomber ceux qui ne commencent pas par "système"..
remove
en place dedrop
. Leremove
option apparaît pour maintenir les contraintes sur les champs de la de la collections sont de la compensation. Lorsque nous avons utilisé ledrop
méthode, launique
contrainte sur l'un de nos champs n'a pas été honorée à la suite de la chute.else
branche (à l'if (c.indexOf("system.") == -1)
) qui neremove
au lieu dedrop
. De cette façon, vous n'êtes pas de gauche avec des collections vide si vous ne l'utilisez pas plusdb[c]
, utilisezdb.getCollection(c)
qui évite les les erreurs lors de la collecte des noms qui sont des chiffres.db.getCollectionNames().forEach(function(c) { if (c.indexOf("system.") == -1) db.getCollection(c).drop(); })
(c.indexOf("system.") == -1)
ressemble à de la sous-chaîne dans une partie du nom de la collection, à savoir la boucle permettrait d'éviter la suppression de "pas.un.système.collection" aussi. Un!=0
condition pourrait être mieux adapté...?J'ai suivi le
db.dropDatabase()
route pour un long temps, cependant, si vous essayez de l'utiliser pour essuyer la base de données entre les cas de test, vous pouvez éventuellement trouver des problèmes avec les index de contraintes qui ne sont pas mis à l'honneur après la base de données de chute. Comme un résultat, vous aurez besoin soit de déconner avec ensureIndexes, ou une version plus simple serait d'éviter la dropDatabase ensemble et simplement la suppression de chaque collection dans une boucle comme:Dans mon cas, j'ai été l'exécution de cette ligne de commande à l'aide de:
db[collection_name].drop()
et il était présentant les mêmes problèmes que vous avez décrit avec ledb.dropDatabase()
méthode. La commutation de las/drop/remove/
a fonctionné à merveille !remove()
ne fonctionne pas bien sur MongoDB pour Windows, et au lieu de cela j'avais besoin de faireremove({})
qui fonctionne sur OSX et Windows.En compilant les réponses de @Robse et @DanH (bravo!), J'ai la solution suivante qui réponde entièrement à moi:
Se connecter à votre base de données, exécutez le code.
Il nettoie la base de données en laissant tomber l'utilisateur des collections et de la vidange de l'installation des collections.
Entendre certains l'utilisent à plein les opérations de suppression pour mongodb à l'aide de shell mongo
Pour supprimer du document dans les collections:
db.mycollection.remove( {name:"stack"} )
Pour supprimer tous les documents dans les collections:
db.mycollection.remove()
À supprimer de la collection :
db.mycollection.drop()
pour supprimer la base de données :
allez d'abord à la base de données par
use mydb
commande, puisUtilisation
si vous souhaitez supprimer uniquement une base de données et ses sous-collections utilisez ceci :
use <database name>;
db.dropDatabase();
si vous souhaitez supprimer toutes les bases de données mongo puis utilisez ceci :
dans le cas où vous auriez besoin de déposer tout à la fois: (chute de toutes les bases de données à la fois)
Façon la plus simple pour supprimer une base de données de dire blog:
Pour les développeurs Meteor.
Ouvrir une deuxième fenêtre de terminal lors de l'exécution de votre application dans
localhost:3000
.Dans votre projet de dossier d'exécution,
meteor mongo
.coolName = new Mongo.Collection('yourCollectionName');
Puis entrez simplement
db.yourCollectionName.drop();
Vous serez automatiquement voir les changements dans votre serveur local.
Pour tout le monde.
db.yourCollectionName.drop();
montrer dbs
utilisation
db.dropDatabase()
//Quelques commandes supplémentaires
montrer les collections
db.collection.drop()
Espère que ça aide
Je préfère
sur
Si votre collection est une collection spéciale
j'.e un plafonné collection ou d'une collection avec un champ marqué comme unique, à l'abandon sera effacer de la collection elle-même et lorsque le recouvrement est de nouveau créé, il sera ordinaires de la collection. Vous devez définir les propriétés de nouveau.
Donc, utiliser
remove()
pour effacer les documents sans enlever la collecte et affectent le comportement de la collection.drop()
est quasi-instantanée etremove({})
serrures de votre db pendant quelques minutes ou dizaines de minutes (selon la taille de la collection).Pour supprimer tous les DBs utilisation:
MongoDB db.dropDatabase() documentation expliquant la modification introduite dans le noyau 2.6:
Dans MongoDB 3.2 et versions plus récentes,
Mongo().getDBNames()
dans lemongo
environnement de ligne de commande de sortie d'une liste de noms de base de données dans le serveur:Un
forEach()
boucle sur le tableau peut ensuite appelerdropDatabase()
à abandonner toutes les bases de données répertoriées. Optionnellement, vous pouvez choisir d'ignorer certains d'importantes bases de données que vous ne voulez pas laisser tomber. Par exemple:Exemple de fonctionnement: