2011-04-19 203 views
20

对于我的项目,我用Django的+蒙戈者优先之一。PyMongo VS MongoEngine Django的

为什么要使用MongoEngine,但不只是PyMongo?什么是优点?用PyMongo查询结果是allready对象,不是吗?那么MongoEngine的目的是什么?

回答

20

我假设你还没有读过MongoEngine的声明。

MongoEngine是一个文档,对象 映射(ORM思考,但对于文件 数据库)从Python的使用MongoDB的 工作。

这基本上说明了一切。

另外:你声称Pymongo将提供的对象是错误的....以及Python中一切都是对象 - 即使是一个字典是一个对象......所以你是正确的,但不能有一个自定义的意义在应用程序级定义的类。

PyMongo是低级别的驱动程序包MongoDB的API到Python和进出提供JSON。

MongoEngine或其他类似层的MongoKit基于MongoDB的数据映射到类似于天然的Python数据库驱动程序+ SQLAlchemy的ORM的对象。

+4

好的。你更喜欢哪个db后端? – megido 2011-05-03 08:11:37

+0

不好解释! “如果你不能简单地解释它,你就不能很好地理解它”。 – Bear 2017-04-15 18:02:16

1

mongoengine将使用pymongo驱动程序连接到mongodb。

如果您熟悉的Django ..使用mongoengine

3

也许太晚,但对于其他人尝试的Django +蒙戈,Django-nonrel是值得考虑的。

16

这是一个古老的问题,但在它的绊脚石,我认为接受的答案不回答这个问题。问题不是“什么是MongoEngine?” - 这是“为什么我应该使用MongoEngine?”这种方法的优点。一般来说,这超越了Django到Python/Mongo。我的两美分:

虽然PyMongo和MongoEngine都返回对象(这没有错),但PyMongo返回需要通过字符串引用键的字典。 MongoEngine允许您通过类为您的文档数据定义模式。然后它会将文档映射到这些类中,并允许您操作它们。为什么要为无模式数据定义模式?因为在我看来,它明确,明确,而且更容易反对。如果没有真正查看数据或运行程序,您不会看到分散在代码中的字典,因为您无法分辨其中的内容。在MongoEngine和像PyCharm这样体面的IDE的情况下,输入一个简单的“。”。对象会通过自动完成功能告诉你所有你需要知道的东西。对于其他开发人员来说,在他们工作时检查和学习数据模型也会容易得多,并且会让任何没有看到代码的人更高效,更快速地工作。

此外,我的,用来操纵与PyMongo文件的语法(其本质上是一样的蒙戈控制台)是难看,容易出错,并且难以维护。

这里是更新在MongoEngine一个文件,这对我来说,是很优雅的一个基本的例子:

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

为什么使用PyMongo? MongoEngine是你和裸机之间的一层,所以它可能会比较慢,尽管我没有任何基准。 PyMongo是较低级别的,所以自然你有更多的控制。对于简单的项目,MongoEngine可能是不必要的。如果您已经熟练使用Mongo语法,您可能会发现PyMongo比我更直观,编写复杂的查询和更新也没有问题。也许你喜欢直接与低级别的字典一起工作,并且对额外的抽象层不感兴趣。也许你正在编写一个不属于大系统的脚本,并且你需要它尽可能精简和尽可能快。

还有更多的争论,但我认为这对于基础知识来说很不错。