Dies ist eine alte Frage, aber ich bin darüber gestolpert und glaube nicht, dass die akzeptierte Antwort die Frage beantwortet. Die Frage war nicht "Was ist MongoEngine?" - sondern "Warum sollte ich MongoEngine verwenden?" Und die Vorteile eines solchen Ansatzes. Das geht über Django hinaus und betrifft Python/Mongo im Allgemeinen. Meine zwei Cents:
Während sowohl PyMongo als auch MongoEngine Objekte zurückgeben (was nicht falsch ist), gibt PyMongo Dictionaries zurück, deren Schlüssel per String referenziert werden müssen. MongoEngine erlaubt es Ihnen, ein Schema über Klassen für Ihre Dokumentdaten zu definieren. Die Dokumente werden dann für Sie auf diese Klassen abgebildet und Sie können sie manipulieren. Warum sollte man ein Schema für schemalose Daten definieren? Weil es meiner Meinung nach klar, eindeutig und viel einfacher zu programmieren ist. Es gibt keine über den Code verstreuten Wörterbücher, aus denen man nicht ersehen kann, was darin steht, ohne sich die Daten anzusehen oder das Programm auszuführen. Im Fall von MongoEngine und einer anständigen IDE wie PyCharm reicht es, ein einfaches "." nach dem Objekt einzugeben, um über die Autovervollständigung alles zu erfahren, was man wissen muss. Es ist auch viel einfacher für andere Entwickler, das Datenmodell zu untersuchen und zu lernen, während sie arbeiten, und es wird jeden, der den Code eine Weile nicht gesehen hat, schneller produktiv machen.
Außerdem finde ich die Syntax, die zur Bearbeitung von Dokumenten mit PyMongo verwendet wird (die im Wesentlichen die gleiche ist wie die Mongo-Konsole), hässlich, fehleranfällig und schwer zu pflegen.
Hier ist ein einfaches Beispiel für die Aktualisierung eines Dokuments in MongoEngine, das mir sehr elegant erscheint:
BlogPost.objects(id=post.id).update(title='Example Post')
Warum PyMongo verwenden? MongoEngine ist eine Schicht zwischen Ihnen und dem nackten Metall, also ist es wahrscheinlich langsamer, obwohl ich keine Benchmarks habe. PyMongo ist auf einer niedrigeren Ebene angesiedelt, so dass Sie natürlich mehr Kontrolle haben. Für einfache Projekte könnte MongoEngine unnötig sein. Wenn Sie die Mongo-Syntax bereits fließend beherrschen, finden Sie PyMongo vielleicht viel intuitiver als ich und haben kein Problem, komplexe Abfragen und Aktualisierungen zu schreiben. Vielleicht gefällt Ihnen die direkte Arbeit mit Wörterbüchern auf dieser niedrigeren Ebene und Sie haben kein Interesse an einer zusätzlichen Abstraktionsebene. Vielleicht schreiben Sie ein Skript, das nicht Teil eines großen Systems ist, und Sie brauchen es so schlank und schnell wie möglich.
Es gibt noch mehr Argumente, aber ich denke, für die Grundlagen reicht das aus.