【问题标题】:Need ORM for JOIN MongoDB collectionsJOIN MongoDB 集合需要 ORM
【发布时间】:2012-03-20 09:58:40
【问题描述】:

我必须在 Python 中创建脚本,其参数具有第一个集合的名称和第二个集合的名称(数据库中的 MongoDB 集合)。我需要在这两个集合之间对一些传递的字段名称执行 JOIN (我不知道集合的结构并且需要足够通用)。我查看了诸如 Ming、MongoKit、MongoAlchemy、MongoEngine 和 minimongo 之类的 ORM http://api.mongodb.org/python/current/tools.html#orm-like-layers 是否有人对这些 ORM 和 JOINS 有任何经验,有什么建议,例如?

【问题讨论】:

  • 我猜你可能需要看看在记录之间有直接链接的 NoSQL 解决方案:Riak 和像 Neo4j 这样的图形数据库。但是,当您真的“不知道集合的结构”时,它们将无济于事

标签: python mongodb orm mongoengine


【解决方案1】:

MongoDB 映射器/ORM 解决方案不太可能允许类似 JOIN 的行为,因为它是与关系数据库相关联的功能,并且在基于 NoSQL 的 ORM 中没有位置(例如,在 MongoDB 中无法始终如一地执行它们)。坦率地说,如果 ORM 确实为您实现了类似 JOIN 的行为,我可能会认为这是一个设计缺陷。

是什么阻止您在 py 脚本中自己实现所请求的功能?

【讨论】:

  • 馆藏非常非常大,所以我怕没有记忆。我可能可以分块执行此操作,但速度会很慢,我希望可能有更优雅的解决方案
  • 如果使用非关系数据库的东西声称是 ORM,我会非常怀疑,因为作者不知道“ORM”中的“R”代表什么第一名。
  • @Damir 您不必先在内存中阅读整个内容。分批进行。映射器在内存使用方面可以做哪些您不能做的事情?
  • @Wooble 实际上非常好。 ORM 是映射解决方案的常用术语,我什至也没有想到;)
  • @RemonvanVliet Wooble 谢谢大家,我将分部分阅读并加入申请。我知道在 Mongoid(ORM for Ruby for MongoDB)中支持连接和关系 has_many,这就是为什么我认为 Python 可以有同样的东西。
【解决方案2】:

Join 不是您要查找的内容,因为您无法真正进行连接。驱动程序或 ORM/ODM(​​例如用于 Java 的 Morphia 和用于 Ruby 的 Mongoid)中通常可用的是参考,其中您有一个 ID 或 ID 列表,它们指向另一个集合中的对象。然后,通常有一个辅助函数来取消引用(为引用运行另一个查询),这样您就可以带回包含的对象而无需显式执行。

实际上,python 驱动程序中有一个功能可以自动完成此操作。这是一个例子(更新为单元测试——其他例子是旧的): https://github.com/mongodb/mongo-python-driver/blob/master/test/test_dbref.py

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-14
    • 1970-01-01
    • 1970-01-01
    • 2016-04-29
    • 2019-10-25
    • 2020-05-17
    相关资源
    最近更新 更多