Подтвердить что ты не робот

PyMongo против MongoEngine для Django

Для одного из моих проектов я предпочитаю использовать Django + Mongo.

Почему я должен использовать MongoEngine, но не только PyMongo? Какие преимущества? Запрос с помощью PyMongo дает результаты, которые являются объектами allready, не так ли? Итак, какова цель MongoEngine?

4b9b3361

Ответ 1

Я предполагаю, что вы не прочитали заявку MongoEngine.

MongoEngine - документ-объект Mapper (подумайте об ORM, но для документа базы данных) для работы с MongoDB из Python.

В основном это говорит.

Кроме того: ваше утверждение о том, что Pymongo будет доставлять объекты, неверно.... хорошо на Python все - объект - даже dict - это объект... так что вы истинны, но не в смысле наличия специального класса определенных на уровне приложения.

PyMongo - это низкоуровневый драйвер, который обменивает API MongoDB на Python и предоставляет JSON для входа и выхода.

MongoEngine или другие слои, такие как MongoKit, отображают ваши данные на основе MongoDB для объектов, похожих на собственные драйверы базы данных Python + SQLAlchemy в качестве ORM.

Ответ 2

Это старый вопрос, но спотыкаясь об этом, я не думаю, что принятый ответ отвечает на вопрос. Вопрос не в том, что такое MongoEngine? - "Почему я должен использовать MongoEngine?" И преимущества такого подхода. Это выходит за рамки Django на Python/Mongo в целом. Мои два цента:

В то время как PyMongo и MongoEngine делают оба объекта возврата (что не так), PyMongo возвращает словари, которые должны иметь свои ключи, на которые ссылается строка. MongoEngine позволяет вам определить схему через классы для ваших данных документа. Затем он отобразит документы в эти классы для вас и позволит вам манипулировать ими. Зачем определять схему для данных без схемы? Потому что, на мой взгляд, его ясный, явный и гораздо более простой способ программирования. Вы не получаете словарей, разбросанных по вашему коду, где вы не можете сказать, что в них, не глядя на данные или запуская программу. В случае MongoEngine и достойной IDE, такой как PyCharm, набрав простой ".". после того, как объект сообщит вам все, что вам нужно знать, с помощью автозаполнения. Кроме того, гораздо проще для других разработчиков приступить к изучению и изучению модели данных, когда они работают, и заставит любого, кто не видел код в то время более продуктивным, быстрее.

Кроме того, для меня синтаксис, используемый для манипулирования документами с помощью PyMongo (который по существу совпадает с консолью mongo), является уродливым, подверженным ошибкам и сложным в обслуживании.

Вот базовый пример обновления документа в MongoEngine, который для меня очень изящный:

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

Зачем использовать PyMongo? MongoEngine - это слой между вами и голым металлом, поэтому он, вероятно, медленнее, хотя у меня нет тестов. PyMongo - более низкий уровень, поэтому, естественно, у вас больше контроля. Для простых проектов MongoEngine может оказаться ненужным. Если вы уже свободно владеете синтаксисом Mongo, вы можете найти PyMongo гораздо более интуитивным, чем я, и у меня нет проблем с написанием сложных запросов и обновлений. Возможно, вам нравится работать непосредственно со словарями на этом более низком уровне и не интересуется дополнительным уровнем абстракции. Возможно, вы пишете script, который не является частью большой системы, и вам нужно, чтобы он был как можно более быстрым и быстрым.

Там больше аргумента, но я думаю, что это очень хорошо для основ.

Ответ 3

Возможно, слишком поздно, но для любого другого, кто пытается Django + Mongo, Django-nonrel заслуживает рассмотрения.

Ответ 4

mongoengine будет использовать драйвер pymongo для подключения к mongodb.

Если вы знакомы с django.. используйте mongoengine