Python mongodb对象的条件嵌入文档

Python mongodb对象的条件嵌入文档,python,mongodb,embedded-documents,Python,Mongodb,Embedded Documents,我需要帮助思考数据建模(我正在使用python和mongoengine)。我有一个对象,我想根据该对象的另一个属性应用不同类别的嵌入文档 class RunningSettings(EmbeddedDocument): max_distance = DecimalField() speed = DecimalField() ... class WeightLiftingSettings(EmbeddedDocument): max_weight = Decima

我需要帮助思考数据建模(我正在使用python和mongoengine)。我有一个对象,我想根据该对象的另一个属性应用不同类别的嵌入文档

class RunningSettings(EmbeddedDocument):
    max_distance = DecimalField()
    speed = DecimalField()
    ...

class WeightLiftingSettings(EmbeddedDocument):
    max_weight = DecimalField()
    reps = IntField()
    ...


class Workout(Document):
    name = StringField()
    description = StringField()
    date_created = DateTimeField(default=datetime.utcnow())
    kind = StringField()

    # pseudo starts
    <if self.kind == "running">
    settings = EmbeddedDocumentField('RunningSettings')

    <if self.kind == "weight_lifting">
    settings = EmbeddedDocumentField('WeightLiftingSettings')
类运行设置(EmbeddedDocument):
最大距离=分米尔菲尔德()
速度=分米尔菲尔德()
...
类权重提升设置(嵌入文档):
最大重量=分米尔菲尔德()
reps=IntField()
...
课堂训练(文件):
name=StringField()
description=StringField()
date\u created=DateTimeField(默认值=datetime.utcnow())
种类=StringField()
#伪启动
设置=EmbeddedDocumentField('RunningSettings')
设置=EmbeddedDocumentField('WeightLiftingSettings')

我的问题是,每次我
.save()
对象时,我都不确定这是如何工作的。也许一开始就太奇怪或复杂了?我愿意接受建议

这听起来像是一个很好的使用继承的候选者:

class RunningSettings(EmbeddedDocument):
    max_distance = DecimalField()
    speed = DecimalField()

class Workout(Document):
    name = StringField()
    description = StringField()
    date_created = DateTimeField(default=datetime.utcnow())
    meta = {'allow_inheritance': True}

class RunningWorkout(Document):
    settings = EmbeddedDocumentField(RunningSettings)

另一个选项是覆盖训练的构造函数并实例化那里的设置,但它不那么优雅。

这听起来像是使用继承的好选择:

class RunningSettings(EmbeddedDocument):
    max_distance = DecimalField()
    speed = DecimalField()

class Workout(Document):
    name = StringField()
    description = StringField()
    date_created = DateTimeField(default=datetime.utcnow())
    meta = {'allow_inheritance': True}

class RunningWorkout(Document):
    settings = EmbeddedDocumentField(RunningSettings)
另一个选项是覆盖训练的构造函数,并在那里实例化设置,但它不那么优雅