sql >> Database teknologi >  >> NoSQL >> MongoDB

PyMongo vs MongoEngine til Django

Dette er et gammelt spørgsmål, men når jeg snubler over det, tror jeg ikke, at det accepterede svar besvarer spørgsmålet. Spørgsmålet var ikke "Hvad er MongoEngine?" - det var "Hvorfor skulle jeg bruge MongoEngine?" Og fordelene ved en sådan tilgang. Dette går ud over Django til Python/Mongo generelt. Mine to øre:

Mens både PyMongo og MongoEngine begge returnerer objekter (hvilket ikke er forkert), returnerer PyMongo ordbøger, der skal have deres nøgler refereret af streng. MongoEngine giver dig mulighed for at definere et skema via klasser for dine dokumentdata. Det vil derefter kortlægge dokumenterne i disse klasser for dig og give dig mulighed for at manipulere dem. Hvorfor definere et skema for skemaløse data? Fordi det efter min mening er klart, eksplicit og meget nemmere at programmere imod. Du ender ikke med ordbøger spredt omkring din kode, hvor du ikke kan se, hvad der er i dem, uden faktisk at se på dataene eller køre programmet. I tilfælde af MongoEngine og en anstændig IDE som PyCharm, skal du skrive et simpelt "." efter objektet vil fortælle dig alt hvad du behøver at vide via autofuldførelse. Det er også meget nemmere for andre udviklere, der kommer ind for at undersøge og lære datamodellen, mens de arbejder, og det vil gøre enhver, der ikke har set koden i et stykke tid, mere produktiv og hurtigere.

Derudover er syntaksen, der bruges til at manipulere dokumenter med PyMongo (som i det væsentlige er den samme som mongo-konsollen), grim, fejltilbøjelig og svær at vedligeholde.

Her er et grundlæggende eksempel på opdatering af et dokument i MongoEngine, hvilket for mig er meget elegant:

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

Hvorfor bruge PyMongo? MongoEngine er et lag mellem dig og det bare metal, så det er nok langsommere, selvom jeg ikke har nogen benchmarks. PyMongo er på et lavere niveau, så du har naturligvis mere kontrol. For simple projekter kan MongoEngine være unødvendig. Hvis du allerede er flydende i Mongo-syntaks, kan du finde PyMongo meget mere intuitiv end jeg gør, og du har ingen problemer med at skrive komplekse forespørgsler og opdateringer. Måske nyder du at arbejde direkte med ordbøger på det lavere niveau og er ikke interesseret i et ekstra lag af abstraktion. Måske skriver du et script, der ikke er en del af et stort system, og du har brug for, at det er så slankt og så hurtigt som muligt.

Der er mere til argumentet, men jeg tror, ​​det er ret godt for det grundlæggende.



  1. MongoDB version 2.6 fejler stadig på 2dsphere geoindeksering med henvisning til manglende evne til at udtrække geonøgler og mulig misformet geometri

  2. PyMongo -- cursor iteration

  3. SignalR Core - Fejl:Websocket lukket med statuskode:1006

  4. Sende typeoplysninger til MongoDB, så det kan deserialisere interfacetyper korrekt?