sql >> Base de Datos >  >> NoSQL >> MongoDB

PyMongo vs MongoEngine para Django

Esta es una pregunta antigua, pero al tropezar con ella, no creo que la respuesta aceptada responda la pregunta. La pregunta no era "¿Qué es MongoEngine?" - fue "¿Por qué debo 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 objetos (lo que no está mal), PyMongo devuelve diccionarios cuyas claves deben referenciarse mediante una cadena. MongoEngine le permite definir un esquema a través de clases para los datos de su documento. Luego 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 programar en contra. No termina con diccionarios esparcidos por su código donde no puede saber qué hay en ellos sin mirar los datos o ejecutar el programa. 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 la función de autocompletar. También es mucho más fácil para otros desarrolladores examinar y aprender el modelo de datos mientras trabajan y hará que cualquiera que no haya visto el código en mucho tiempo sea más productivo y rápido.

Además, para mí, la sintaxis 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.

Aquí hay un ejemplo básico de 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 lento, aunque no tengo puntos de referencia. PyMongo es un nivel más bajo, por lo que, naturalmente, tiene más control. Para proyectos simples, MongoEngine podría ser innecesario. Si ya domina la sintaxis de Mongo, es posible que PyMongo le parezca mucho más intuitivo que yo y que no tenga problemas para escribir consultas y actualizaciones complejas. Quizás disfrute trabajar 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 es 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.