python - PyMongo vs MongoEngine for Django

标签 python django mongodb pymongo mongoengine

对于我的一个项目,我更喜欢使用 Django+Mongo

为什么我应该使用 MongoEngine,而不仅仅是 PyMongo?有什么优势?使用 PyMongo 查询会得到已经是对象的结果,不是吗?那么MongoEngine的目的是什么?

最佳答案

这是一个古老的问题,但偶然发现它,我认为接受的答案不能回答这个问题。问题不是“什么是 MongoEngine?” - 它是“我为什么要使用 MongoEngine?”以及这种方法的优点。一般来说,这超出了 Django 到 Python/Mongo。我的两分钱:

虽然 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 比我更直观,并且编写复杂的查询和更新也没有问题。也许您喜欢直接使用较低级别的字典,并且对额外的抽象层不感兴趣。也许您正在编写一个不属于大型系统的脚本,并且您需要它尽可能精简和快速。

还有更多的争论,但我认为这对于基础知识来说非常好。

关于python - PyMongo vs MongoEngine for Django,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5712857/

相关文章:

python 请求 SSL 错误(证书验证失败)

python - 将位写入二进制文件

python - Django "Running migrations": django. db.utils.OperationalError : (2013, 'Lost connection to MySQL server during query' 期间出错)

javascript - 保持脚本元素独立

node.js - Nodejs 仍然路由到 mongodb 中已删除的条目

mongodb - 有没有办法使用 "update"函数在给定查询和排序选项的情况下更新 MongoDB 集合中的第一个文档?

arrays - 对象数组上的 MongoDb 投影,仅获取匹配的对象

python - 将 pickle 文件写入 AWS 中的 s3 存储桶

python - pyspark reduce 方法的歧义

python - Django updateview 表单验证错误未显示在模板中