mongodb对象的条件嵌入文档

2024-04-20 07:37:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要帮助思考数据建模(我正在使用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')

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


Tags: 数据对象selfifsettingsmaxclassweight
1条回答
网友
1楼 · 发布于 2024-04-20 07:37:15

这听起来很适合使用继承:

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)

另一个选择是重写Workout的构造函数并实例化那里的设置,但它不那么优雅。你知道吗

相关问题 更多 >