PyMongo 与 Django 的 MongoEngine

2024-01-08

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

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PyMongo 与 Django 的 MongoEngine 的相关文章

随机推荐

  • 使编译器/优化器能够制作更快的程序的编码实践

    许多年前 C 编译器还不是特别聪明 作为一种解决方法 K R 发明了register关键字 提示编译器 将此变量保留在内部寄存器中也许是个好主意 他们还制作了三级运算符来帮助生成更好的代码 随着时间的推移 编译器逐渐成熟 他们变得非常聪明
  • 数据表固定列(仅限右侧)问题

    我正在使用 JQuery Datatable 当我使用固定列时遇到了问题 它已经显示了两次我的固定栏 https i stack imgur com qlSCh png 我正在使用服务器端处理 这是我的代码 dataTable table
  • jQuery 在传递 POST 数据时在新选项卡中打开页面

    我有一个名为 list 的 JavaScript 变量 我需要将其作为 POST 数据发送到另一个页面并在新选项卡中打开该页面 存在 POST 数据 这段代码 jQuery post datadestination php list 发送数
  • Softmax 交叉熵损失爆炸

    我正在创建一个用于逐像素分类的深度卷积神经网络 我正在使用 adam 优化器 softmax 和交叉熵 Github 存储库 https github com dhasl002 Research DeepLearning I asked a
  • 如何使用 rspec 测试具有嵌套路由的控制器

    我使用 InherritedResource 创建控制器 class AppsController lt InheritedResources Base belongs to company Devise before filter log
  • 如何使用RxJava返回值?

    让我们考虑一下这种情况 我们有一些类 它有一个返回某个值的方法 public class Foo Observer
  • Netbeans 7.0 的 UML 插件?

    我如何安装 添加 UML 插件到 Netbeans 7 0 我可以找到多种安装插件的方法 但仅限于 6 9 的早期版本 http forums netbeans org topic28035 html http forums netbean
  • OS X Mavericks 上有 PostgreSQL 吗?

    我知道 OS X Mountain Lion 上安装了一个版本的 PostgreSQL 如果你想使用这个数据库引擎 你必须安装一个新版本并进行一些更改 http nextmarvel net blog 2011 09 brew instal
  • 对动态添加的文本使用内联 CKEditor

    我正在构建一个网络应用程序 它使用 javascript 动态地将元素添加到页面 然后可以使用进行编辑contentEditable true and CKEditor 目前 如果我向页面添加一个元素contentEditable true
  • 不使用 jQuery 添加到 DOM

    这应该很简单 但事实并非如此 document getElementsByTagName body 0 document createTextNode document createElement div some HTML div 它创建
  • 类名宏[重复]

    这个问题在这里已经有答案了 可能的重复 CLASSC 中的宏 https stackoverflow com questions 1666802 class macro in c 你好 有没有什么方法可以用宏来获取类的名称 比如 功能 对于
  • 无法覆盖 __call__ 的实现

    以此为例 class Foo object def init self msg self msg msg def call self return self msg foo Foo hello print foo Prints hello
  • 使用 Telnet 或 SSH 与 Perl 从本地计算机在远程计算机上运行 perl 脚本

    我想使用 telnet 或 ssh 在远程计算机上运行 Perl 脚本 该脚本位于我的本地主机上 如何执行此操作 有人可以帮我解决这个问题吗 如果由于某种原因您不想将脚本复制到远程主机然后运行它 您可以通过 stdin 将脚本发送到 Per
  • .NET 3.5 中的 FormsAuthentication.Timeout.TotalMinutes

    我刚刚使用 FormsAuthentication 我想要 Web 配置中表单身份验证标记的超时属性值 在 4 0 中 我们可以通过 FormsAuthentication Timeout TotalMinutes 获取此信息 参考 For
  • socket.io + node.js 的内存泄漏

    我的 Node js 应用程序似乎存在内存泄漏 我很快就构建了它 而且我的 JavaScript 不太强大 所以这可能很容易 我已经对它做了一些堆转储 它是字符串object 内存泄漏 速度约为每 5 分钟 1MB 我扩展了String 它
  • PHP MySQL 计数查询结果是字符串,而不是整数

    我有以下 MySQL 查询和 PHP 代码来格式化Count结果为单个数组 equalDimensions query SELECT allEqual AS COL1 COUNT AS imgCount FROM SELECT imgHei
  • Go 和 PHP 中的 SHA256 给出不同的结果

    我正在尝试通过 HTTP 将 SHA256 哈希字符串发送到服务器 我想通过执行 SHA256 哈希并验证两个匹配来进行身份验证 出于测试目的 我使用相同的字符串 但是我的结果不匹配 这可能是我的 base64 encode 调用的默认编码
  • 为什么我在这个 devise_group 调用中收到 NoMethodError 错误?

    我正在使用 devise 3 5 2 ruby 2 2 2 rails 4 2 3 class ApplicationController lt ActionController Base Prevent CSRF attacks by r
  • Application.Exit() 不起作用

    static void Main Application EnableVisualStyles Application SetCompatibleTextRenderingDefault false Application Exit App
  • PyMongo 与 Django 的 MongoEngine

    对于我的一个项目 我更喜欢使用Django Mongodb 我为什么要使用蒙戈引擎 但不仅仅是PyMongo 有什么优点 使用 PyMongo 查询给出的结果是已准备好的对象 不是吗 那么 MongoEngine 的目的是什么 这是一个老问