MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

PyMongo contre MongoEngine pour Django

C'est une vieille question mais en trébuchant dessus, je ne pense pas que la réponse acceptée réponde à la question. La question n'était pas "Qu'est-ce que MongoEngine?" - c'était "Pourquoi devrais-je utiliser MongoEngine?" Et les avantages d'une telle approche. Cela va au-delà de Django vers Python/Mongo en général. Mes deux sous :

Alors que PyMongo et MongoEngine renvoient tous deux des objets (ce qui n'est pas faux), PyMongo renvoie des dictionnaires dont les clés doivent être référencées par une chaîne. MongoEngine vous permet de définir un schéma via des classes pour vos données de document. Il mappera ensuite les documents dans ces classes pour vous et vous permettra de les manipuler. Pourquoi définir un schéma pour des données sans schéma ? Parce qu'à mon avis, c'est clair, explicite et beaucoup plus facile à programmer. Vous ne vous retrouvez pas avec des dictionnaires éparpillés dans votre code où vous ne pouvez pas savoir ce qu'ils contiennent sans réellement regarder les données ou exécuter le programme. Dans le cas de MongoEngine et d'un IDE décent comme PyCharm, en tapant un simple "." après l'objet vous dira tout ce que vous devez savoir via l'auto-complétion. Il est également beaucoup plus facile pour les autres développeurs d'examiner et d'apprendre le modèle de données au fur et à mesure qu'ils travaillent et cela rendra plus productif et plus rapide quiconque n'a pas vu le code depuis un certain temps.

De plus, pour moi, la syntaxe utilisée pour manipuler les documents avec PyMongo (qui est essentiellement la même que la console mongo) est laide, sujette aux erreurs et difficile à maintenir.

Voici un exemple basique de mise à jour d'un document dans MongoEngine, qui pour moi est très élégant :

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

Pourquoi utiliser PyMongo ? MongoEngine est une couche entre vous et le métal nu, donc c'est probablement plus lent, même si je n'ai pas de repères. PyMongo est de niveau inférieur, donc naturellement vous avez plus de contrôle. Pour des projets simples, MongoEngine peut être inutile. Si vous maîtrisez déjà la syntaxe Mongo, vous trouverez peut-être PyMongo beaucoup plus intuitif que moi et vous n'aurez aucun problème à écrire des requêtes et des mises à jour complexes. Peut-être aimez-vous travailler directement avec des dictionnaires à ce niveau inférieur et n'êtes-vous pas intéressé par une couche supplémentaire d'abstraction. Peut-être que vous écrivez un script qui ne fait pas partie d'un grand système, et vous avez besoin qu'il soit aussi léger et aussi rapide que possible.

Il y a plus à l'argument, mais je pense que c'est assez bon pour les bases.