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

PyMongo vs MongoEngine per Django

Questa è una vecchia domanda ma, per caso, non credo che la risposta accettata risponda alla domanda. La domanda non era "Cos'è MongoEngine?" - era "Perché dovrei usare MongoEngine?" E i vantaggi di un tale approccio. Questo va oltre Django a Python/Mongo in generale. I miei due centesimi:

Mentre sia PyMongo che MongoEngine restituiscono entrambi oggetti (che non è sbagliato), PyMongo restituisce dizionari che devono avere le loro chiavi referenziate da una stringa. MongoEngine ti consente di definire uno schema tramite classi per i dati del tuo documento. Quindi mapperà i documenti in quelle classi per te e ti consentirà di manipolarli. Perché definire uno schema per dati senza schema? Perché secondo me è chiaro, esplicito e molto più facile da programmare contro. Non finisci con i dizionari sparsi per il tuo codice in cui non puoi dire cosa c'è in essi senza effettivamente guardare i dati o eseguire il programma. Nel caso di MongoEngine e un IDE decente come PyCharm, digitando un semplice "." dopo che l'oggetto ti dirà tutto ciò che devi sapere tramite il completamento automatico. È anche molto più facile per gli altri sviluppatori che entrano per esaminare e apprendere il modello di dati mentre funziona e renderà chiunque non veda il codice da un po' più produttivo, più veloce.

Inoltre, per me, la sintassi utilizzata per manipolare i documenti con PyMongo (che è essenzialmente la stessa della console mongo) è brutta, soggetta a errori e difficile da mantenere.

Ecco un esempio di base di aggiornamento di un documento in MongoEngine, che per me è molto elegante:

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

Perché usare PyMongo? MongoEngine è uno strato tra te e il bare metal, quindi probabilmente è più lento, anche se non ho benchmark. PyMongo è di livello inferiore, quindi naturalmente hai più controllo. Per progetti semplici, MongoEngine potrebbe non essere necessario. Se sei già fluente nella sintassi di Mongo, potresti trovare PyMongo molto più intuitivo di me e non avere problemi a scrivere query e aggiornamenti complessi. Forse ti piace lavorare direttamente con i dizionari a quel livello inferiore e non sei interessato a un ulteriore livello di astrazione. Forse stai scrivendo uno script che non fa parte di un grande sistema e hai bisogno che sia il più snello e veloce possibile.

C'è dell'altro nell'argomento, ma penso che sia abbastanza buono per le basi.