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)