Comment supprimer une base de données MongoDB de la ligne de commande?

855

Quelle est la façon la plus simple de le faire à partir de mon invite bash?

Moulin à café
la source
5
voir cette question: stackoverflow.com/questions/3366397/… . C'est vraiment facile de le faire à partir de la coquille de mongo.
Jesse Pollak

Réponses:

1084

Comme ça:

mongo <dbname> --eval "db.dropDatabase()"

Plus d'informations sur l'écriture de scripts du shell à partir de la ligne de commande ici: https://docs.mongodb.com/manual/tutorial/write-scripts-for-the-mongo-shell/#scripting

Tim Gautier
la source
Cela a été très utile dans mon cas. D'une manière ou d'une autre, j'avais une base de données nommée "mean-dev" à partir d'une ancienne installation, et la saisie de "mean-dev.dropDatabase ()" dans le shell mongo avait pour résultat "ReferenceError: la moyenne n'est pas définie". Mais l'utilisation de la solution dans cette réponse a fait l'affaire. +1
KP MacGregor
22
Si vous voulez obtenir un résultat lisible par l'homme, faites-le de cette façon: mongo <dbname> --eval "printjson(db.dropDatabase())"
Dmytro Uhnichenko
1
KP MacGregor. vous auriez dû être: "use mean-dev" + "db.dropDatabase ()"
ozma
Merci. Voici comment personnaliser l'hôte et le port: mongo <yourDb> --host <yourHost> --port <yourPort> --eval 'db.dropDatabase()'
Clemens
844

La meilleure façon de le faire est depuis la console mongodb:

> use mydb; 
> db.dropDatabase();

Vous pouvez également arrêter mongodet supprimer les fichiers de données de votre répertoire de données, puis redémarrer.

Astuce: vous pouvez également déplacer les fichiers de données vers un sous-dossier et les supprimer si vous êtes sûr de ne plus en avoir besoin.

mnemosyn
la source
2
Je pense qu'il veut dire directement à partir de l'invite n'est-ce pas? Dans ce cas, vous devez soit générer un fichier .js avec ces commandes et l'invoquer à partir de l'invite en utilisant "mongo dropdb.js" ou quelque chose ou faites ce que vous dites et supprimez les fichiers manuellement.
Remon van Vliet
2
mais sachez que vous ne pouvez pas utiliser la usecommande dans le fichier .js, vous devez vous connecter à une base de données concrète (spécifiez dbname pour la commande mongo)
Betlista
46
Astuce de pro: après avoir supprimé une base de données, vous souhaiterez peut-être quitter le shell mongo et supprimer votre ~/.dbshellfichier pour effacer l'historique de vos commandes. (Il peut y avoir une meilleure façon de le faire - je ne suis pas sûr.) Je le fais parce que, contrairement à SQL, la commande mongo pour supprimer une base de données ne fait pas réellement référence au nom de la base de données à supprimer - elle supprime simplement le base de données à laquelle le client est actuellement connecté. La dropDatabasesuppression de l' historique de vos commandes vous empêchera de relire accidentellement la commande et de supprimer involontairement une deuxième base de données.
Chris Allen Lane
3
C'est une idée intelligente, @chrisallenlane. Le shell mongodb est parfois un outil assez dangereux ... :)
mnemosyn
Avertissement: si vous supprimez une base de données et créez une nouvelle base de données avec le même nom, vous devez soit redémarrer toutes les instances mongos, soit utiliser la commande flushRouterConfig sur toutes les instances mongos avant de lire ou d'écrire dans cette base de données. Cette action garantit que les instances mongos actualisent leur cache de métadonnées, y compris l'emplacement du fragment principal pour la nouvelle base de données. Sinon, les mongos peuvent manquer des données sur les lectures et peuvent écrire des données dans un faux fragment.
Lekr0
115

J'ai trouvé cela facile à retenir:

mongo //to start the mongodb shell

show dbs //to list existing databases

use <dbname> //the <dbname> is the database you'd like to drop

db //should show <dbname> just to be sure I'm working with the right database

db.dropDatabase() //will delete the database & return { "dropped" : "<dbname>", "ok" : 1 }
Alex Baban
la source
113

Vous n'avez pas besoin d'heredocs ou d'eval , mongolui - même peut servir d'interprète.

#!/usr/bin/env mongo
var db = new Mongo().getDB("someDatabase");
db.dropDatabase();

Rendez le fichier exécutable et exécutez-le.

mikemaccana
la source
3
Notez que le nom du script doit se terminer par .js, sinon il sera interprété comme l'adresse db.
Vegard
1
@Vegard Ce n'est pas correct. Vous exécutez mongo filenamece qui est inutile - le fichier a déjà un interpréteur sur la ligne supérieure. ./filename
Rendez
@mikemaccana Je le sais, mais ça ./filenameva vraiment marcher /usr/bin/env mongo filename, non? Et donc, si filenamecela ne se termine pas .py, mongo ne reconnaîtra pas l'argument comme un script à exécuter.
Vegard
"Faire ./filename exécutera réellement / usr / bin / env mongo filename, non?" Non. Vérifiez la sortie de ps.
mikemaccana
@mikemaccana La sortie de psne vous montre que ce qui fonctionne au moment où vous appelez ps, pas la chaîne d' execappels qui mène à ce point ni le travail que le noyau a fait pour charger et exécuter le fichier. Si vous voulez savoir ce qui se passe réellement, vous devez utiliser un wrapper autour /usr/bin/env, le définir comme exécutable dans la ligne shebang, puis lancer le tout avec strace.
kbolino
31

Démarrez MongoDB

La commande pour la suppression de la base de données est:

1. sélectionnez d'abord la base de données que vous souhaitez supprimer

use < database name >

2. Ensuite, utilisez ceci ..

db.dropDatabase()
bud-e
la source
28

Vous pouvez également utiliser un "hérédoc":

mongo localhost/db <<EOF
db.dropDatabase()
EOF

Résultats en sortie comme:

mongo localhost/db <<EOF
db.dropDatabase()
EOF
MongoDB shell version: 2.2.2
connecting to: localhost/db
{ "dropped" : "db", "ok" : 1 }    
bye

J'aime utiliser des heredocs pour des choses comme ça, au cas où vous voudriez une séquence de commandes plus complexe.

David
la source
19

Voici quelques-unes des opérations de suppression complète pour mongodb 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 mydbcommande, puis

db.dropDatabase()

directement depuis l'invite de commande ou blash: mongo mydb --eval "db.dropDatabase()

bhv
la source
18

Autre moyen:

echo "db.dropDatabase()" | mongo <database name>
Gabriel Mancini
la source
15

Exécuter dans un terminal:

mongo // To go to shell

show databases // To show all existing databases.

use <DATA_BASE> // To switch to the wanted database.

db.dropDatabase() // To remove the current database.
Anderson Lopes
la source
1
Même réponse que celle-ci , donnée un mois plus tôt.
Dan Dascalescu
10

Ouvrez une autre fenêtre de terminal et exécutez les commandes suivantes,

mongodb
use mydb
db.dropDatabase()

La sortie de cette opération doit ressembler à ce qui suit

MAC:FOLDER USER$ mongodb
> show databases
local      0.78125GB
mydb       0.23012GB
test       0.23012GB
> use mydb
switched to db mydb
>db.dropDatabase()
{ "dropped" : "mydb", "ok" : 1 }
>

Veuillez noter qu'il mydbest toujours utilisé, donc l'insertion d'une entrée à ce moment initialisera à nouveau la base de données.

helcode
la source
4

En utilisant Javascript, vous pouvez facilement créer un script drop_bad.js pour supprimer votre base de données:

créez drop_bad.js :

use bad;
db.dropDatabase();

Ensuite, exécutez 1 commande dans le terminal pour exécuter le script à l'aide du shell mongo:

mongo < drop_bad.js
sergiuz
la source
2

Même s'il existe plusieurs méthodes, la meilleure façon (la plus efficace et la plus simple) est d'utiliser db.dropDatabase()

Lakmal Vithanage
la source
2

Dans l'invite de commandes, connectez-vous d'abord à mongodb à l'aide de la commande suivante:

mongo -h [host-name]:[port:number] -d [dbname] -u [username] -p [password]

vous accéderez à db avec <dbname>.

Exécutez la commande suivante pour supprimer toute la base de données:

db.dropDatabase()
TechGuy
la source
-h est une aide, -d n'est pas une option plus semblable à `mongo --host [nom-hôte]: [port: numéro] -u [nom d'utilisateur] -p [mot de passe] [nom_base] --eval" db.dropDatabase ( ) "`
jasenmichael
2

une télécommande liner supprimer toutes les collections de la base de données mongo

note doit utiliser --host, (-h est l'aide pour la commande mongo), et -d n'est pas une option, sélectionnez la base de données et la commande après le mot de passe.

mongo --host <mongo_host>:<mongo_port> -u <db_user> -p <db_pass> <your_db> --eval "db.dropDatabase()"
jasenmichael
la source
0

Connectez-vous à votre ligne de commande mongoDB: Et tapez les commandes ci-dessous. utilisez "YOUR_DATABASE_NAME"; db.dropDatabase ();

Shrinivas Kalangutkar
la source
0

Supprimez une base de données MongoDB à l'aide de python:

import argparse

import pymongo


if __name__ == "__main__":
    """
    Drop a Database.
    """

    parser = argparse.ArgumentParser()
    parser.add_argument("--host", default='mongodb://localhost:27017',
                        help="mongodb URI [default: %(default)s]")
    parser.add_argument("--database", default=None,
                        help="database name: %(default)s]")

    args = parser.parse_args()

    client = pymongo.MongoClient(host=args.host)

    if args.database in client.list_database_names():
        client.drop_database(args.database)
        print(f"Dropped: '{args.database}'")
    else:
        print(f"Database '{args.database}' does not exist")
Joe Drumgoole
la source
-1

db affichera le type de nom actuel de la base de données: db.dropDatabase ();

1- Sélectionnez la base de données à supprimer en utilisant ' use le mot-clé '.

2- puis tapez db.dropDatabase ();

nixxo_raa
la source
-2

utiliser la commande suivante du shell mongo pour supprimer db

utilisation ; db.dropDatabase ();

Anoop Sharma
la source
comment cette commande spécifie-t-elle la base de données à supprimer? Avec une base de données appelée « auth-utilisateurs » J'ai essayé > use auth-users ; db.dropDatabase()et > use auth-users; db.dropDatabase()et les deux retourné[thread1] Error: [auth-users ; db.dropD atabase()] is not a valid database name :
M. Kennedy