Dit is een oude vraag, maar als ik erover struikelde, denk ik niet dat het geaccepteerde antwoord de vraag beantwoordt. De vraag was niet "Wat is MongoEngine?" - het was "Waarom zou ik MongoEngine gebruiken?" En de voordelen van een dergelijke aanpak. Dit gaat verder dan Django tot Python/Mongo in het algemeen. Mijn twee cent:
Terwijl zowel PyMongo als MongoEngine beide objecten retourneren (wat niet verkeerd is), retourneert PyMongo woordenboeken waarvan de sleutels met een tekenreeks moeten worden verwezen. Met MongoEngine kunt u een schema definiëren via klassen voor uw documentgegevens. Vervolgens worden de documenten voor u in die klassen ingedeeld en kunt u ze manipuleren. Waarom een schema definiëren voor gegevens zonder schema? Omdat het naar mijn mening duidelijk, expliciet en veel gemakkelijker te programmeren is. Je eindigt niet met woordenboeken verspreid over je code waar je niet kunt zien wat erin staat zonder echt naar de gegevens te kijken of het programma uit te voeren. In het geval van MongoEngine en een fatsoenlijke IDE zoals PyCharm, typt u een eenvoudige "." nadat het object u alles zal vertellen wat u moet weten via automatisch aanvullen. Het is ook veel gemakkelijker voor andere ontwikkelaars die binnenkomen om het datamodel te onderzoeken en te leren terwijl ze werken en zal iedereen die de code al een tijdje niet heeft gezien productiever en sneller maken.
Bovendien vind ik de syntaxis die wordt gebruikt om documenten te manipuleren met PyMongo (die in wezen hetzelfde is als de mongo-console) lelijk, foutgevoelig en moeilijk te onderhouden.
Hier is een eenvoudig voorbeeld van het bijwerken van een document in MongoEngine, wat voor mij erg elegant is:
BlogPost.objects(id=post.id).update(title='Example Post')
Waarom PyMongo gebruiken? MongoEngine is een laag tussen jou en het kale metaal, dus het is waarschijnlijk langzamer, hoewel ik geen benchmarks heb. PyMongo is een lager niveau, dus je hebt natuurlijk meer controle. Voor eenvoudige projecten is MongoEngine misschien niet nodig. Als je al vloeiend bent in de Mongo-syntaxis, vind je PyMongo misschien veel intuïtiever dan ik en heb je geen probleem met het schrijven van complexe query's en updates. Misschien werk je graag rechtstreeks met woordenboeken op dat lagere niveau en ben je niet geïnteresseerd in een extra laag abstractie. Misschien schrijf je een script dat geen deel uitmaakt van een groot systeem en moet het zo slank en snel mogelijk zijn.
Er is meer aan de hand, maar ik denk dat dat redelijk goed is voor de basis.