これは古い質問ですが、つまずいて、受け入れられた答えが質問に答えるとは思いません。質問は「MongoEngineとは何ですか?」ではありませんでした。 -「なぜMongoEngineを使うべきなのか」ということでした。そして、そのようなアプローチの利点。これは、Djangoを超えてPython/Mongo一般になります。私の2セント:
PyMongoとMongoEngineはどちらもオブジェクトを返しますが(これは間違いではありません)、PyMongoは、キーを文字列で参照する必要がある辞書を返します。 MongoEngineを使用すると、ドキュメントデータのクラスを介してスキーマを定義できます。次に、ドキュメントをそれらのクラスにマップし、操作できるようにします。スキーマのないデータのスキーマを定義するのはなぜですか?私の意見では、それは明確で、明確で、プログラミングがはるかに簡単だからです。実際にデータを確認したり、プログラムを実行したりしないと、辞書に何が含まれているかがわからない場合に、コードに辞書が散らばってしまうことはありません。 MongoEngineとPyCharmのようなまともなIDEの場合、単純な「。」を入力します。オブジェクトがオートコンプリートを介して知る必要があるすべてを教えてくれた後。また、他の開発者が作業中にデータモデルを調べて学習するのもはるかに簡単で、しばらくの間コードを見たことがない人はより生産的で迅速になります。
さらに、私にとって、PyMongo(基本的にmongoコンソールと同じ)でドキュメントを操作するために使用される構文は、見苦しく、エラーが発生しやすく、保守が困難です。
これは、MongoEngineでドキュメントを更新する基本的な例です。これは、私にとって非常にエレガントです。
BlogPost.objects(id=post.id).update(title='Example Post')
なぜPyMongoを使用するのですか? MongoEngineはあなたとベアメタルの間のレイヤーなので、ベンチマークはありませんが、おそらく遅くなります。 PyMongoは低レベルなので、当然、より詳細に制御できます。単純なプロジェクトの場合、MongoEngineは不要な場合があります。すでにMongo構文に精通している場合は、PyMongoが私よりもはるかに直感的であり、複雑なクエリや更新を問題なく記述できる場合があります。おそらく、あなたはその下位レベルの辞書を直接操作することを楽しんでおり、抽象化の追加レイヤーには興味がありません。おそらく、大きなシステムの一部ではないスクリプトを書いているので、できるだけスリムで高速である必要があります。
議論にはまだまだありますが、それは基本的にはかなり良いことだと思います。