Je fais du développement sur MongoDB. À des fins totalement non perverses, je veux parfois tout effacer dans une base de données, c'est-à-dire supprimer toutes les collections et tout ce qui pourrait traîner et recommencer à zéro. Y a-t-il une seule ligne de code qui me permettra de faire cela? Points bonus pour donner à la fois une méthode de console MongoDB et une méthode de pilote MongoDB Ruby.
454
db.dropAllUsers();
En outre, à partir de la ligne de commande:
la source
J'ai eu le même problème, quand j'ai dû réinitialiser toutes les collections, mais je ne voulais pas perdre d'utilisateurs de base de données. Utilisez la ligne de code suivante, si vous souhaitez enregistrer la configuration utilisateur pour la base de données:
Ce code passera par tous les noms de collection d'une base de données et supprimera ceux qui ne commencent pas par «système».
la source
remove
place dedrop
. L'remove
option semble conserver les contraintes sur les champs des collections que vous effacez. Lorsque nous avons utilisé ladrop
méthode, launique
contrainte sur l'un de nos champs n'a pas été respectée après la baisse.else
branche (à laif (c.indexOf("system.") == -1)
) qui fait à laremove
place dedrop
. De cette façon, vous ne vous retrouvez pas avec des collections vides si vous ne les utilisez plusdb[c]
, utilisezdb.getCollection(c)
ce qui évite les erreurs lorsque les noms de collection sont des chiffres .db.getCollectionNames().forEach(function(c) { if (c.indexOf("system.") == -1) db.getCollection(c).drop(); })
J'ai suivi l'
db.dropDatabase()
itinéraire pendant une longue période, mais si vous essayez de l'utiliser pour effacer la base de données entre les cas de test, vous pouvez éventuellement trouver des problèmes avec les contraintes d'index non respectées après la suppression de la base de données. En conséquence, vous devrez soit jouer avec EnsureIndexes, soit une route plus simple éviterait complètement dropDatabase et supprimerait simplement de chaque collection dans une boucle telle que:Dans mon cas, je l'exécutais à partir de la ligne de commande en utilisant:
la source
db[collection_name].drop()
et elle présentait les mêmes problèmes que vous avez décrits avec ladb.dropDatabase()
méthode. Changer des/drop/remove/
fonction avec brio!remove()
cela ne fonctionnait pas bien sur MongoDB pour Windows, et à la place, je devais faire ceremove({})
qui fonctionne à la fois sur OSX et Windows.En compilant les réponses de @Robse et @DanH (bravo!), J'ai la solution suivante qui me satisfait complètement:
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 système.
la source
Écoutez, certaines utilisent des opérations de suppression complète pour mongodb en utilisant 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()
pour supprimer la base de données: accédez d'abord à cette base de données par
use mydb
commande, puisla source
Utilisation
la source
au cas où vous auriez besoin de tout supprimer à la fois: (supprimez toutes les bases de données à la fois)
la source
la source
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 de mongo, utilisez ceci:
la source
Le moyen le plus simple de supprimer une base de données est le blog:
la source
Pour les développeurs Meteor.
Ouvrez une deuxième fenêtre de terminal lors de l'exécution de votre application dans
localhost:3000
.Dans le dossier de votre projet, exécutez
meteor mongo
.coolName = new Mongo.Collection('yourCollectionName');
Entrez simplement
db.yourCollectionName.drop();
Vous verrez automatiquement les modifications sur votre serveur local.
Pour tout le monde.
db.yourCollectionName.drop();
la source
J'espère que cela pourra aider
la source
je préfère
plus de
Si votre collection était une collection spéciale, c'est-à-dire une collection plafonnée ou une collection avec un champ marqué comme unique, la suppression effacera la collection elle-même et lorsque la collection sera à nouveau créée, ce sera une collection ordinaire. Vous devrez à nouveau définir les propriétés. Utilisez donc
remove()
pour effacer les documents sans supprimer la collection et sans affecter le comportement de la collection.la source
drop()
c'est presque instantané etremove({})
verrouille votre base de données pendant des minutes ou des dizaines de minutes (selon la taille de la collection).Pour supprimer toutes les bases de données, utilisez:
la source
Documentation MongoDB db.dropDatabase () expliquant la modification introduite en 2.6:
la source
Dans MongoDB 3.2 et plus récent,
Mongo().getDBNames()
lemongo
shell affichera une liste de noms de base de données sur le serveur:Une
forEach()
boucle sur le tableau pourrait alors appelerdropDatabase()
pour supprimer toutes les bases de données répertoriées. En option, vous pouvez choisir d'ignorer certaines bases de données importantes que vous ne souhaitez pas supprimer. Par exemple:Exemple d'exécution:
la source