【问题标题】:Mongoengine Document as EmbeddedDocumentMongoengine 文档作为 EmbeddedDocument
【发布时间】:2012-06-20 21:33:32
【问题描述】:

我有一个用户定义的 mongoengine.Document 子类。

class User(Document):
    meta = {'collection': 'users', 'allow_inheritance': False}
    _id = ObjectIdField()
    password = StringField(max_length=50)
    name = StringField(max_length=50, required

现在我想将它用作带有自己集合的独立文档,但我也想将它用作 EmbeddedDocument 作为游戏记录的一部分:

class Game(Document):
    meta = {'collection': 'games', 'allow_inheritance': False}
    _id = ObjectIdField()
    name = StringField()
    owner = EmbeddedField(User)

但是有一个问题。 Mongoengine 只允许嵌入 EmbeddedDocument 子类。有没有办法解决它?

【问题讨论】:

    标签: python mongodb mongoengine


    【解决方案1】:

    试试这样:

    class User(Document, EmbeddedDocument):
        ...
    

    【讨论】:

      【解决方案2】:

      你不应该使用ReferenceField吗?

      否则,您将存储两个断开连接但逻辑相同的文档。

      【讨论】:

      • 是的,我知道。这是计划好的行为。
      • 一个简单问题的后期复活,我知道,但这就是答案。 +1。永远不要将您的数据存储在两个不同的地方(除非需求巨大并且您已经了解所有含义)。在应用程序代码中扩展引用字段真的很容易,而且几乎同样容易错过一些极端情况,忘记更新对象的另一个副本,最终导致不一致。
      • @dokkaebi 我100%同意你。我只是在使用一些遗留代码/数据库,并且不得不通过 mongoengine 来连接它。我们的一些服务直接访问数据库。我开始进行重大重构,将 Mongo 与 RESTfull API 连接起来,以便在一个地方管理模式。正如您所说,下一步是改进数据库结构,但我们将流程拆分为一些步骤,以便更好地对其进行测试/控制。第一步是切换每个依赖服务以使用 RESTfull API,然后透明地更改 DB 模式 :)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多