W3docs

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() et Database.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 gone

Supprimer 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 ?

SituationMéthode recommandée
Vous avez déjà un objet Collectioncol.drop()
Vous n'avez que le nom de la collection sous forme de stringdb.drop_collection(name)
Suppression dans une session ou une transactiondb.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 :

  1. Permissions insuffisantes — l'utilisateur connecté ne dispose pas du privilège dropCollection.
  2. 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érationEffet sur la collectionEffet sur les indexVitesse
col.drop()Collection suppriméeTous les index supprimésTrès rapide
col.delete_many({})Collection conservée (vide)Index préservésPlus 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 retourne True/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.OperationFailure pour les erreurs de permissions et pymongo.errors.ConnectionFailure pour 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 :

Was this page helpful?