2012-06-08 29 views
5

我有一个mongoengine.Document子类用户定义。Mongoengine Document as EmbeddedDocument

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子类。有没有办法解决它?

回答

2

尝试这样的:

class User(Document, EmbeddedDocument): 
    ... 
+1

这似乎没有工作后0.10版 – user541905

1

你不是应该使用ReferenceField

否则,您正在存储两个断开但逻辑相同的文档。

+1

是的,我知道。这是计划的行为。 – yakxxx

+0

我知道一个简单问题的晚期复活,但这是答案。 +1。切勿将数据存储在两个不同的地方(除非需求巨大,并且您已经了解所有含义)。在应用程序代码中扩展参考字段非常简单,并且几乎很容易错过某些边界情况,忘记更新对象的另一个副本,并最终导致不一致。 – dokkaebi

+1

@dokkaebi我同意你100%。我只是在使用一些遗留代码/数据库,并且必须通过mongoengine来连接它。我们的一些服务直接打到数据库。我开始进行重大的重构,将Mongo与RESTfull API接口在一起来管理模式。下一步就是像你说的那样改进数据库结构,但是我们在一些步骤中分解过程以更好地测试/控制它。第一步是切换每个依赖服务以使用RESTfull API,然后透明地更改数据库模式:) – yakxxx

相关问题