sql >> Databasteknik >  >> NoSQL >> MongoDB

PyMongo vs MongoEngine för Django

Detta är en gammal fråga men när jag snubblar över den tror jag inte att det accepterade svaret besvarar frågan. Frågan var inte "Vad är MongoEngine?" - det var "Varför ska jag använda MongoEngine?" Och fördelarna med ett sådant tillvägagångssätt. Detta går utöver Django till Python/Mongo i allmänhet. Mina två cent:

Medan både PyMongo och MongoEngine båda returnerar objekt (vilket inte är fel), returnerar PyMongo ordböcker som måste ha sina nycklar refererade med en sträng. MongoEngine låter dig definiera ett schema via klasser för dina dokumentdata. Det kommer sedan att mappa dokumenten till dessa klasser åt dig och låta dig manipulera dem. Varför definiera ett schema för schemalösa data? För enligt min mening är det tydligt, tydligt och mycket lättare att programmera mot. Du slutar inte med ordböcker utspridda över din kod där du inte kan se vad som finns i dem utan att faktiskt titta på data eller köra programmet. När det gäller MongoEngine och en anständig IDE som PyCharm, skriv ett enkelt "." efter objektet kommer att berätta allt du behöver veta via auto-complete. Det är också mycket lättare för andra utvecklare som kommer in att undersöka och lära sig datamodellen när de fungerar och kommer att göra alla som inte har sett koden på ett tag mer produktiva, snabbare.

Dessutom, för mig, är syntaxen som används för att manipulera dokument med PyMongo (vilket är i huvudsak samma som mongo-konsolen) ful, felbenägen och svår att underhålla.

Här är ett grundläggande exempel på att uppdatera ett dokument i MongoEngine, vilket för mig är mycket elegant:

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

Varför använda PyMongo? MongoEngine är ett lager mellan dig och den rena metallen, så det är förmodligen långsammare, även om jag inte har några riktmärken. PyMongo är lägre nivå, så naturligtvis har du mer kontroll. För enkla projekt kan MongoEngine vara onödigt. Om du redan är flytande i Mongo-syntax, kanske du tycker att PyMongo är mycket mer intuitivt än jag och har inga problem med att skriva komplexa frågor och uppdateringar. Du kanske tycker om att arbeta direkt med ordböcker på den lägre nivån och är inte intresserad av ett extra lager av abstraktion. Kanske skriver du ett manus som inte är en del av ett stort system, och du behöver att det ska vara så smalt och så snabbt som möjligt.

Det finns mer i argumentet, men jag tror att det är ganska bra för grunderna.



  1. Hur ställer man in läs timeout på node redis klient?

  2. Kryptera lösenordsfält i mongodb

  3. Hur importerar man Mongodb ObjectId från CSV-fil med mongoimport?

  4. Sparar Mongoose-objekt i två samlingar