MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

PyMongo vs. MongoEngine für Django

Dies ist eine alte Frage, aber wenn ich darüber stolpere, glaube ich nicht, dass die akzeptierte Antwort die Frage beantwortet. Die Frage war nicht "Was ist MongoEngine?" - es war "Warum sollte ich MongoEngine verwenden?" Und die Vorteile eines solchen Ansatzes. Dies geht über Django hinaus zu Python/Mongo im Allgemeinen. Meine zwei Cent:

Während sowohl PyMongo als auch MongoEngine beide Objekte zurückgeben (was nicht falsch ist), gibt PyMongo Wörterbücher zurück, deren Schlüssel per Zeichenfolge referenziert werden müssen. Mit MongoEngine können Sie ein Schema über Klassen für Ihre Dokumentdaten definieren. Es wird dann die Dokumente für Sie diesen Klassen zuordnen und Ihnen erlauben, sie zu manipulieren. Warum ein Schema für schemalose Daten definieren? Weil es meiner Meinung nach klar, explizit und viel einfacher zu programmieren ist. Sie landen nicht mit über Ihren Code verstreuten Wörterbüchern, in denen Sie nicht erkennen können, was darin enthalten ist, ohne sich die Daten anzusehen oder das Programm auszuführen. Im Fall von MongoEngine und einer anständigen IDE wie PyCharm kann die Eingabe eines einfachen "." Nachdem das Objekt Ihnen alles, was Sie wissen müssen, per Autovervollständigung mitteilt. Es ist auch viel einfacher für andere Entwickler, das Datenmodell zu untersuchen und zu lernen, während sie arbeiten, und wird jeden, der den Code eine Weile nicht gesehen hat, produktiver und schneller machen.

Darüber hinaus ist die Syntax, die zum Bearbeiten von Dokumenten mit PyMongo verwendet wird (die im Wesentlichen mit der Mongo-Konsole identisch ist), meiner Meinung nach hässlich, fehleranfällig und schwer zu warten.

Hier ist ein einfaches Beispiel für die Aktualisierung eines Dokuments in MongoEngine, was für mich sehr elegant ist:

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

Warum PyMongo verwenden? MongoEngine ist eine Schicht zwischen Ihnen und dem Bare Metal, daher ist es wahrscheinlich langsamer, obwohl ich keine Benchmarks habe. PyMongo ist ein niedrigeres Level, also haben Sie natürlich mehr Kontrolle. Für einfache Projekte ist MongoEngine möglicherweise nicht erforderlich. Wenn Sie die Mongo-Syntax bereits fließend beherrschen, finden Sie PyMongo möglicherweise viel intuitiver als ich und haben kein Problem damit, komplexe Abfragen und Aktualisierungen zu schreiben. Vielleicht arbeiten Sie gerne direkt mit Wörterbüchern auf dieser niedrigeren Ebene und sind nicht an einer zusätzlichen Abstraktionsebene interessiert. Vielleicht schreiben Sie ein Skript, das nicht Teil eines großen Systems ist, und Sie möchten, dass es so schlank und schnell wie möglich ist.

Es gibt noch mehr Argumente, aber ich denke, das ist ziemlich gut für die Grundlagen.