【问题标题】:Python ORM for mongodb in django that doesnt use db.eval()不使用 db.eval() 的 django 中用于 mongodb 的 Python ORM
【发布时间】:2011-08-15 16:44:41
【问题描述】:

我使用的是 ExtJS 前端,而后端我使用的是 django、mongodb 和 mongoengine(ORM - 介于两者之间)。一切正常,直到我决定对我的 mongo 数据库进行分片,结果 db.eval() (使用 datbase 运行命令)不适用于分片数据库。所以我必须关掉ORM。

我发现了其他几个 ORM,例如 mongokit 和 mongoalchemy,但是我不想遍历每个单独的 ORM,并希望在将所有命令从最近的 ORM 更改为新的 ORM 后它可以工作。有谁知道不使用 db.eval() 或使用分片 mongo 数据库的 Mongo ORM?

谢谢

【问题讨论】:

  • 你在用db.eval()做什么?可能有一种方法可以重构该代码以与共享系统一起使用...
  • 我的意思是,您要完成什么具体任务? db.eval 不适用于分片集合,但这是 MongoDB 本身的限制,而不是 Mongoengine。详情请见Sharding Limits
  • MongoDB 本身不允许 db.eval 针对分片集合运行。这不是 Mongoengine 的限制,而是 MongoDB 本身的限制。因此,您将无法找到可以让您执行此操作的 ORM/ODM。然而,如果你能描述你最终想要完成的事情,那么可能还有另一种方法可以实现它在分片集合上工作。
  • 您意识到 Mongoengine 仅将 db.eval 用于 exec_js() 方法,而不用于任何其他方法。如果您不在自己的代码中使用它,您可以使用 Mongoengine 与分片很好。
  • AFAIK mongoengine 仅在调用 exec_js 时使用 db.eval。如果没有 exec_js,你能完成你想做的事情吗?对我来说,这似乎不是 mongoengine 问题。

标签: python django orm mongodb


【解决方案1】:

MongoEngine 现在已更新为不使用 db.eval 用于应该使用 map_reduce 的 2 个区域:sumaverageitem_frequencies 已更新为默认使用 map_reduce 而不是使用 exec_js 和 db.eval

最后这是一个小更新:https://github.com/hmarr/mongoengine/pull/256/files 感谢@dcrosta 提供补丁并让我知道这个线程存在!

您可以从开发分支https://github.com/hmarr/mongoengine/tree/dev获取最新的分片快乐代码

不要忘记 monogoengine 的邮件列表 - http://groups.google.com/group/mongoengine-users 用于任何 cmets / 问题或反馈,还有 #mongoengine on irc

干杯,

罗斯

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-01
    • 1970-01-01
    • 2012-05-02
    • 2018-01-18
    • 1970-01-01
    • 1970-01-01
    • 2013-03-03
    • 1970-01-01
    相关资源
    最近更新 更多