Supprimer une collection MongoDB en Python
Apprenez à supprimer une collection MongoDB en Python avec PyMongo : drop(), drop_collection(), vérification d'existence et patterns de nettoyage.
Supprimer une collection MongoDB efface définitivement tous les documents qu'elle contient et supprime la collection elle-même. L'opération est immédiate et ne peut pas être annulée. Il est donc utile de bien comprendre ce que PyMongo propose, comment vérifier l'existence d'une collection avant d'agir dessus, et quelle méthode choisir selon la situation.
Ce chapitre couvre :
- Les deux façons de supprimer une collection —
Collection.drop()etDatabase.drop_collection() - Vérifier si une collection existe avant de la supprimer
- Gérer les erreurs proprement
- Les patterns de nettoyage sûrs pour les tests et les migrations
Prérequis : Python 3.8+, PyMongo installé (
pip install pymongo) et un serveur MongoDB en cours d'exécution. Consultez MongoDB Get Started et MongoDB Create Database si vous devez les configurer au préalable.
Connexion à MongoDB
Chaque opération commence par un MongoClient. Passez la chaîne de connexion de votre serveur :
import pymongo
client = pymongo.MongoClient("mongodb://localhost:27017/")
db = client["mydatabase"]Si votre serveur requiert une authentification, incluez les identifiants dans l'URI :
client = pymongo.MongoClient("mongodb://username:password@localhost:27017/")Consultez MongoDB Create Database pour une discussion complète des options de connexion.
Supprimer une collection avec drop()
L'approche la plus directe consiste à appeler drop() sur un objet Collection :
import pymongo
client = pymongo.MongoClient("mongodb://localhost:27017/")
db = client["mydatabase"]
col = db["mycollection"]
col.drop()
print("Collection dropped.")drop() renvoie True si la collection existait et a été supprimée, ou False si elle n'existait pas. PyMongo ne lève pas d'erreur lorsqu'on tente de supprimer une collection inexistante — il retourne silencieusement False.
result = col.drop()
print(result) # True if it existed, False if it was already goneSupprimer une collection avec drop_collection()
Vous pouvez également supprimer une collection via l'objet Database en utilisant drop_collection(). C'est utile lorsque vous n'avez que le nom de la collection sous forme de string et que vous ne souhaitez pas créer un objet Collection au préalable :
import pymongo
client = pymongo.MongoClient("mongodb://localhost:27017/")
db = client["mydatabase"]
db.drop_collection("mycollection")
print("Collection dropped via database method.")drop_collection() accepte également un objet Collection directement, de sorte que les deux formes suivantes sont équivalentes :
# By name (string)
db.drop_collection("mycollection")
# By Collection object
col = db["mycollection"]
db.drop_collection(col)Quelle méthode utiliser ?
| Situation | Méthode recommandée |
|---|---|
Vous avez déjà un objet Collection | col.drop() |
| Vous n'avez que le nom de la collection sous forme de string | db.drop_collection(name) |
| Suppression dans une session ou une transaction | db.drop_collection(name, session=session) |
Vérifier si une collection existe avant de la supprimer
Comme drop() réussit silencieusement sur une collection manquante, vous pouvez vouloir confirmer l'existence de la collection avant de la supprimer — par exemple, pour enregistrer un avertissement ou éviter un affichage trompeur dans un script :
import pymongo
client = pymongo.MongoClient("mongodb://localhost:27017/")
db = client["mydatabase"]
collection_name = "mycollection"
if collection_name in db.list_collection_names():
db.drop_collection(collection_name)
print(f"'{collection_name}' was dropped.")
else:
print(f"'{collection_name}' does not exist — nothing to drop.")db.list_collection_names() retourne une liste de strings, une par collection dans la base de données. Le test in est un simple contrôle d'appartenance.
Gestion des erreurs
La plupart des opérations de suppression réussissent sans erreur, mais deux situations peuvent provoquer des échecs :
- Permissions insuffisantes — l'utilisateur connecté ne dispose pas du privilège
dropCollection. - Erreurs réseau — la connexion à MongoDB est perdue en cours d'opération.
PyMongo lève pymongo.errors.OperationFailure pour les erreurs côté serveur (y compris les problèmes de permissions) et pymongo.errors.ConnectionFailure pour les problèmes réseau. Capturez les deux :
import pymongo
client = pymongo.MongoClient("mongodb://localhost:27017/")
db = client["mydatabase"]
col = db["mycollection"]
try:
col.drop()
print("Collection dropped successfully.")
except pymongo.errors.OperationFailure as e:
print(f"Server error while dropping collection: {e}")
except pymongo.errors.ConnectionFailure as e:
print(f"Connection error: {e}")Exemple pratique : nettoyage sûr dans les tests
Un pattern courant en pratique consiste à supprimer une collection à la fin d'un test ou d'une migration pour laisser la base de données propre. Cet exemple montre un helper réutilisable qui supprime une collection uniquement si elle existe, enregistre le résultat et ne lève jamais d'exception qui pourrait faire échouer un test sans rapport :
import pymongo
def drop_if_exists(db, collection_name: str) -> bool:
"""
Drop a collection if it exists. Returns True if dropped, False otherwise.
Never raises on a missing collection.
"""
if collection_name not in db.list_collection_names():
print(f"[skip] '{collection_name}' does not exist.")
return False
try:
db.drop_collection(collection_name)
print(f"[ok] '{collection_name}' dropped.")
return True
except pymongo.errors.OperationFailure as e:
print(f"[err] Could not drop '{collection_name}': {e}")
return False
# --- usage ---
client = pymongo.MongoClient("mongodb://localhost:27017/")
db = client["testdb"]
# Seed some data so the collection exists
db["orders"].insert_one({"item": "pen", "qty": 100})
drop_if_exists(db, "orders") # [ok] 'orders' dropped.
drop_if_exists(db, "orders") # [skip] 'orders' does not exist.Supprimer une collection vs. supprimer tous les documents
Ce sont deux opérations différentes avec des résultats distincts :
| Opération | Effet sur la collection | Effet sur les index | Vitesse |
|---|---|---|---|
col.drop() | Collection supprimée | Tous les index supprimés | Très rapide |
col.delete_many({}) | Collection conservée (vide) | Index préservés | Plus lent sur les grandes collections |
Utilisez drop() lorsque vous souhaitez repartir de zéro — par exemple, entre deux exécutions de tests ou dans le cadre d'une migration de schéma où la structure des index va également changer. Utilisez delete_many({}) lorsque vous avez besoin de conserver les index et la configuration de la collection. Consultez MongoDB Delete pour les détails sur delete_many().
Résumé
Collection.drop()supprime la collection et retourneTrue/False. Aucune exception n'est levée pour une collection manquante.Database.drop_collection(name)produit le même résultat et est pratique lorsque vous n'avez que le nom de la collection sous forme de string.- Utilisez
db.list_collection_names()pour vérifier l'existence avant de supprimer lorsque vous avez besoin d'une logique conditionnelle. - Capturez
pymongo.errors.OperationFailurepour les erreurs de permissions etpymongo.errors.ConnectionFailurepour les problèmes réseau. - La suppression retire à la fois les documents et les index. Utilisez
delete_many({})à la place si vous souhaitez conserver les index.
Chapitres connexes :
- MongoDB Create Collection — créer des collections avec des options et des validateurs
- MongoDB Delete — supprimer des documents individuels avec
delete_one()etdelete_many() - MongoDB Get Started — installer PyMongo et se connecter à MongoDB