Python

MongoEngine: Mapeador Objeto-Documento de Python para MongoDB

MongoEngine es un ODM de Python para MongoDB con una API declarativa similar a Django ORM, compatible con MongoDB v4.4 hasta v8.0.

Keeping this site alive takes effort — your support means everything.
無程式碼也能輕鬆打造專業LINE官方帳號!一鍵導入模板,讓AI助你行銷加分! 無程式碼也能輕鬆打造專業LINE官方帳號!一鍵導入模板,讓AI助你行銷加分!
MongoEngine: Mapeador Objeto-Documento de Python para MongoDB

MongoDB es una de las bases de datos NoSQL mas populares, pero trabajar con PyMongo sin procesar puede ser verboso y propenso a errores. Se pasa demasiado tiempo escribiendo codigo repetitivo para validacion de documentos, verificacion de tipos de campos y gestion de relaciones. MongoEngine resuelve esto trayendo una capa de abstraccion declarativa similar a Django a MongoDB que ha resistido la prueba del tiempo a traves de mas de una decada de desarrollo en Python.

MongoEngine es un Mapeador Objeto-Documento (ODM) de Python que proporciona una API declarativa de alto nivel para interactuar con MongoDB. Define documentos como clases de Python con campos tipados, soporta validacion, relaciones, indices y consultas a traves de una API QuerySet expresiva. El proyecto en github.com/MongoEngine/mongoengine ha estado en desarrollo activo desde 2010 y continua siendo mantenido a traves de las versiones de MongoDB 4.4 a 8.0.

La biblioteca esta disenada para desarrolladores que desean la flexibilidad del modelo de documentos de MongoDB combinada con la seguridad y productividad de los objetos Python tipados. Si ha usado el ORM de Django, los patrones de MongoEngine le resultaran inmediatamente familiares, y eso es muy intencional.

Que es MongoEngine?

MongoEngine es un ODM de Python que asigna documentos de MongoDB a objetos de Python. Proporciona validacion de campos, construccion de consultas, manejo de referencias y aplicacion de esquemas, manteniendo la naturaleza flexible de esquemas de MongoDB donde la necesite. Los documentos se definen declarativamente como clases, y las consultas devuelven objetos Python tipados en lugar de diccionarios sin procesar.

from mongoengine import Document, StringField, IntField, ListField

class User(Document):
    name = StringField(required=True, max_length=50)
    email = StringField(required=True, unique=True)
    age = IntField(min_value=0)
    tags = ListField(StringField())

# Uso
user = User(name="Alice", email="alice@example.com", age=30, tags=["python", "mongodb"])
user.save()

Cuales son las dependencias de MongoEngine?

MongoEngine es ligero en su huella de dependencias.

DependenciaPropositoRequisito de Version
PyMongoControlador MongoDB central3.4+
Servidor MongoDBBackend de base de datos4.4 a 8.0
gridfs (opcional)Soporte GridFS para archivos grandesViene con PyMongo
blinker (opcional)Soporte de senales para hooks pre/post guardado1.1+

No se requieren bibliotecas magicas estilo ORM o extensiones C. MongoEngine es Python puro sobre PyMongo.

Que versiones de MongoDB soporta MongoEngine?

La matriz de soporte de MongoEngine abarca MongoDB 4.4 hasta la version 8.0 mas reciente.

Version de MongoDBCompatibilidad MongoEngineCaracteristicas Clave
4.4Soporte completoUso estable en produccion
5.0Soporte completoColecciones de series temporales
6.0Soporte completoStreams de cambios, mejoras de agregacion
7.0Soporte completoCifrado consultable, nuevas etapas de agregacion
8.0Soporte completoUltimas mejoras de rendimiento

El proyecto mantiene pruebas CI en todas las versiones compatibles para asegurar la compatibilidad con cada lanzamiento de MongoDB.

Como se ve un modelo de MongoEngine en la practica?

La API declarativa de MongoEngine hace que el modelado de documentos sea intuitivo. Aqui hay un ejemplo mas involucrado con relaciones:

from mongoengine import *

class Post(Document):
    title = StringField(required=True)
    content = StringField()
    published_date = DateTimeField()
    author = ReferenceField('User')
    tags = ListField(StringField())
    meta = {'indexes': ['title', 'published_date']}

class Comment(Document):
    post = ReferenceField(Post, reverse_delete_rule=CASCADE)
    author = StringField()
    text = StringField()
    created_date = DateTimeField(default=datetime.now)

Las consultas utilizan una API QuerySet fluida que se encadena limpiamente:

posts = Post.objects(author=user, published_date__gte=some_date)
comments = Comment.objects(post=post).order_by('-created_date')

Se puede usar MongoEngine con Flask?

Si. Flask-MongoEngine envuelve MongoEngine para aplicaciones Flask, proporcionando un patron de configuracion y manejo de sesiones integrado.

from flask import Flask
from flask_mongoengine import MongoEngine

app = Flask(__name__)
app.config['MONGODB_SETTINGS'] = {
    'host': 'mongodb://localhost:27017/mydatabase'
}
db = MongoEngine(app)

Una vez configurado, sus clases Document de MongoEngine funcionan dentro del contexto de la aplicacion Flask, incluyendo conexiones con alcance de solicitud y variables globales de plantilla.

Preguntas Frecuentes

Que es MongoEngine?

MongoEngine es un Mapeador Objeto-Documento (ODM) de Python para MongoDB que asigna documentos de base de datos a objetos Python tipados. Proporciona una API declarativa similar al ORM de Django con validacion de campos, construccion de consultas y gestion de relaciones.

Cuales son las dependencias de MongoEngine?

MongoEngine requiere PyMongo 3.4+ como su unica dependencia dura. Las dependencias opcionales incluyen blinker para soporte de senales y gridfs para almacenamiento de archivos grandes.

Que versiones de MongoDB soporta MongoEngine?

Las versiones de MongoDB 4.4, 5.0, 6.0, 7.0 y 8.0 son totalmente compatibles. Las pruebas CI cubren todas estas versiones para asegurar la compatibilidad continua.

Como se ve un modelo de MongoEngine?

Un modelo de MongoEngine es una clase de Python que hereda de Document con definiciones de campos tipados (StringField, IntField, DateTimeField, ReferenceField, etc.). Las consultas usan una sintaxis de filtro similar a Django con una API QuerySet fluida.

MongoEngine funciona con Flask?

Si. Flask-MongoEngine proporciona integracion perfecta, manejando la configuracion y el ciclo de vida de la conexion dentro del contexto de la aplicacion Flask.

Lecturas Adicionales

TAG
CATEGORIES