W3docs

Eliminar una colección de MongoDB en Python

Aprende a eliminar una colección de MongoDB en Python con PyMongo: drop(), drop_collection(), verificación de existencia y patrones de desmontaje seguro.

Eliminar una colección de MongoDB borra permanentemente todos los documentos que contiene y elimina la propia colección. La operación es inmediata y no puede revertirse, por lo que vale la pena entender exactamente qué ofrece PyMongo, cómo verificar si una colección existe antes de actuar sobre ella y qué método elegir en distintas situaciones.

Este capítulo cubre:

  • Las dos formas de eliminar una colección: Collection.drop() y Database.drop_collection()
  • Verificar si una colección existe antes de eliminarla
  • Manejar errores de forma adecuada
  • Patrones de desmontaje seguro para pruebas y migraciones

Requisitos previos: Python 3.8+, PyMongo instalado (pip install pymongo) y un servidor MongoDB en ejecución. Consulta MongoDB Primeros pasos y MongoDB Crear base de datos si necesitas configurarlos primero.

Conectarse a MongoDB

Cada operación comienza con un MongoClient. Pasa la cadena de conexión de tu servidor:

import pymongo

client = pymongo.MongoClient("mongodb://localhost:27017/")
db = client["mydatabase"]

Si tu servidor requiere autenticación, incluye las credenciales en el URI:

client = pymongo.MongoClient("mongodb://username:password@localhost:27017/")

Consulta MongoDB Crear base de datos para una discusión completa sobre las opciones de conexión.

Eliminar una colección con drop()

El enfoque más directo es llamar a drop() sobre un objeto Collection:

import pymongo

client = pymongo.MongoClient("mongodb://localhost:27017/")
db = client["mydatabase"]
col = db["mycollection"]

col.drop()
print("Collection dropped.")

drop() devuelve True si la colección existía y fue eliminada, o False si la colección no existía. PyMongo no lanza un error cuando intentas eliminar una colección inexistente — simplemente devuelve False en silencio.

result = col.drop()
print(result)  # True if it existed, False if it was already gone

Eliminar una colección con drop_collection()

También puedes eliminar una colección a través del objeto Database usando drop_collection(). Esto resulta útil cuando solo tienes el nombre de la colección como string y no quieres construir primero un objeto Collection:

import pymongo

client = pymongo.MongoClient("mongodb://localhost:27017/")
db = client["mydatabase"]

db.drop_collection("mycollection")
print("Collection dropped via database method.")

drop_collection() también acepta un objeto Collection directamente, por lo que las siguientes dos formas son equivalentes:

# By name (string)
db.drop_collection("mycollection")

# By Collection object
col = db["mycollection"]
db.drop_collection(col)

¿Qué método debo usar?

SituaciónMétodo recomendado
Ya tienes un objeto Collectioncol.drop()
Solo tienes el nombre de la colección como stringdb.drop_collection(name)
Eliminar dentro de una sesión o transaccióndb.drop_collection(name, session=session)

Verificar si una colección existe antes de eliminarla

Dado que drop() tiene éxito de forma silenciosa con una colección inexistente, es posible que quieras confirmar que la colección existe antes de eliminarla — por ejemplo, para registrar una advertencia o evitar una salida engañosa en 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() devuelve una lista de strings, uno por cada colección en la base de datos. La comprobación con in es una simple prueba de pertenencia.

Manejo de errores

La mayoría de las operaciones de eliminación se realizan sin errores, pero dos situaciones pueden causar fallos:

  1. Permisos insuficientes — el usuario conectado no tiene el privilegio dropCollection.
  2. Errores de red — la conexión a MongoDB se pierde durante la operación.

PyMongo lanza pymongo.errors.OperationFailure para errores del lado del servidor (incluidos los problemas de permisos) y pymongo.errors.ConnectionFailure para problemas de red. Captura ambos:

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}")

Ejemplo práctico: desmontaje seguro en pruebas

Un patrón común en la práctica es eliminar una colección al final de una prueba o migración para dejar la base de datos limpia. Este ejemplo muestra un helper reutilizable que elimina una colección solo cuando existe, registra el resultado y nunca lanza una excepción que pueda hacer fallar una prueba no relacionada:

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.

Eliminar una colección vs. borrar todos los documentos

Estas son dos operaciones distintas con resultados diferentes:

OperaciónEfecto sobre la colecciónEfecto sobre los índicesVelocidad
col.drop()Colección eliminadaTodos los índices eliminadosMuy rápida
col.delete_many({})Colección permanece (vacía)Índices conservadosMás lenta en colecciones grandes

Usa drop() cuando quieras empezar completamente desde cero — por ejemplo, entre ejecuciones de pruebas o como parte de una migración de esquema donde también cambiará la disposición de índices. Usa delete_many({}) cuando necesites mantener los índices y la configuración de la colección intactos. Consulta MongoDB Delete para los detalles de delete_many().

Resumen

  • Collection.drop() elimina la colección y devuelve True/False. No se lanza ninguna excepción si la colección no existe.
  • Database.drop_collection(name) logra el mismo resultado y es conveniente cuando solo tienes el nombre de la colección como string.
  • Usa db.list_collection_names() para verificar la existencia antes de eliminar cuando necesites lógica condicional.
  • Captura pymongo.errors.OperationFailure para errores de permisos y pymongo.errors.ConnectionFailure para problemas de red.
  • Eliminar una colección borra tanto los documentos como los índices. Usa delete_many({}) en su lugar si quieres conservar los índices.

Capítulos relacionados:

Was this page helpful?