PyMongo vs MongoEngine para Django

Para uno de mis proyectos prefiero usar Django + Mongo .

¿Por qué debería usar MongoEngine , pero no solo PyMongo ? ¿Qué son las ventajas? La consulta con PyMongo da resultados que ya son objetos , ¿no es así? Entonces, ¿cuál es el propósito de MongoEngine?

Supongo que no has leído el reclamo de MongoEngine.

MongoEngine es un Map-Object Mapper (piense en ORM, pero para bases de datos de documentos) para trabajar con MongoDB de Python.

Esto básicamente lo dice todo.

Además: su afirmación de que Pymongo entregaría objetos está mal … bueno, en Python todo es un objeto, incluso un dict es un objeto … por lo que es cierto, pero no en el sentido de tener una clase personalizada definida en el nivel de aplicación.

PyMongo es el controlador de bajo nivel que integra la API de MongoDB en Python y entrega JSON dentro y fuera.

MongoEngine u otras capas como MongoKit asignan sus datos basados ​​en MongoDB a objetos similares a los controladores de base de datos nativos de Python + SQLAlchemy como ORM.

Esta es una pregunta antigua, pero tropezando con ella, no creo que la respuesta aceptada responda a la pregunta. La pregunta no era “¿Qué es MongoEngine?” – fue “¿Por qué debería usar MongoEngine?” Y las ventajas de tal enfoque. Esto va más allá de Django a Python / Mongo en general. Mis dos centavos:

Si bien tanto PyMongo como MongoEngine devuelven ambos objetos (lo que no es incorrecto), PyMongo devuelve diccionarios que necesitan que se haga referencia a sus claves por cadena. MongoEngine le permite definir un esquema a través de clases para los datos de su documento. A continuación, asignará los documentos a esas clases para usted y le permitirá manipularlos. ¿Por qué definir un esquema para datos sin esquema? Porque en mi opinión, es claro, explícito y mucho más fácil de progtwigr en contra. No terminas con diccionarios dispersos sobre tu código donde no puedes decir qué hay en ellos sin mirar realmente los datos o ejecutar el progtwig. En el caso de MongoEngine y un IDE decente como PyCharm, escribir un simple “.” después de que el objeto le diga todo lo que necesita saber a través de autocompletar. También es mucho más fácil para otros desarrolladores que vienen a examinar y aprender el modelo de datos a medida que funcionan y harán que cualquier persona que no haya visto el código en un tiempo sea más productivo y rápido.

Además, para mí, la syntax utilizada para manipular documentos con PyMongo (que es esencialmente la misma que la consola Mongo) es fea, propensa a errores y difícil de mantener.

Este es un ejemplo básico de la actualización de un documento en MongoEngine, que para mí es muy elegante:

BlogPost.objects(id=post.id).update(title='Example Post') 

¿Por qué usar PyMongo? MongoEngine es una capa entre usted y el metal desnudo, por lo que probablemente sea más lenta, aunque no tengo ningún punto de referencia. PyMongo es de nivel inferior, así que naturalmente tienes más control. Para proyectos simples, MongoEngine puede ser innecesario. Si ya tiene fluidez en la syntax de Mongo, puede que PyMongo sea mucho más intuitivo que yo y que no tenga problemas para escribir consultas complejas y actualizaciones. Quizás disfrute trabajando directamente con diccionarios en ese nivel inferior y no esté interesado en una capa adicional de abstracción. Tal vez está escribiendo un script que no forma parte de un gran sistema, y ​​necesita que sea lo más ágil y rápido posible.

Hay más en el argumento, pero creo que eso es bastante bueno para lo básico.

Probablemente sea demasiado tarde, pero para cualquier otra persona que intente Django + Mongo, vale la pena considerar Django-nonrel .

mongoengine utilizará el controlador pymongo para conectarse a mongodb.

Si está familiarizado con django .. use mongoengine