Interacción con MongoDB usando Python

Conexión del cliente

Terminal MongoDB

$ bin/mongo.exe
Versión shell de MongoDB v3.6.13
help  # Mostrar ayuda

show dbs     # Listar bases de datos
use blog     # Cambiar a base de datos (crea si no existe)
db           # Mostrar base de datos actual
db.usuarios.insert({usuario:"tom", edad:20})

Alternativa con MongoDB Compass: mongodb://127.0.0.1:27017

Plugin PyCharm

Instalar "Mongo Plugin" en Setings/Plugins y reiniciar. Accceder en View/Tool Windows/Mongo Explorer.

Conexión con Python

Usar el driver oficial PyMongo compatible con MongoDB 2.6+ y Python 3.4+.

from pymongo import MongoClient

url = 'mongodb://127.0.0.1:27017'

with MongoClient(url) as cliente:
    base_datos = cliente.datos_ejemplo
    coleccion = base_datos.coleccion_ejemplo
    
    # Insertar documento
    resultado = coleccion.insert_one({"valor": 456})
    print("ID insertado:", resultado.inserted_id)
    
    # Consultar documentos
    for doc in coleccion.find():
        print(doc)

Conceptos fundamentales

RDBMS MongoDB
Base de datos Base de datos
Tabla Colección
Fila Documento
Columna Campo
Clave primaria _id (ObjectId)

Operaciones CRUD

Inserción

with MongoClient(url) as cliente:
    coleccion = cliente.ejemplo.datos
    resultado = coleccion.insert_one({"campo1": 789})
    print("ID generado:", resultado.inserted_id)

Consultas

Búsqueda simple

documento = coleccion.find_one({"nombre": "juan"})

Operadores de comparación

# Mayor que
resultados = coleccion.find({"cantidad": {"$gt": 50}})

# En lista
resultados = coleccion.find({"estado": {"$in": ["activo", "pendiente"]}})

Proyecicones

# Solo campos específicos
docs = coleccion.find({}, {"nombre": 1, "edad": 1})

Actualizaciones

# Actualizar un documento
coleccion.update_one(
    {"_id": objeto_id},
    {"$set": {"estado": "completado"}}
)

# Incrementar valor
coleccion.update_many(
    {"categoria": "A"},
    {"$inc": {"contador": 5}}
)

Eliminación

# Eliminar un documento
coleccion.delete_one({"usuario": "temporal"})

# Eliminar múltiples
coleccion.delete_many({"estado": "expirado"})

Funciones avanzadas

Agregación

pipeline = [
    {"$match": {"activo": True}},
    {"$group": {"_id": "$departamento", "total": {"$sum": 1}}}
]
resultados = coleccion.aggregate(pipeline)

Índices de texto

# Crear índice
coleccion.create_index([("titulo", "text"), ("descripcion", "text")])

# Búsqueda textual
docs = coleccion.find({"$text": {"$search": "importante urgente"}})

Paginación

# Saltar 5, limitar 10 resultados
resultados = coleccion.find().skip(5).limit(10)

Etiquetas: MongoDB PyMongo Python BSON OperacionesCRUD

Publicado el 6-19 23:37