Python mongodb对象的条件嵌入文档
我需要帮助思考数据建模(我正在使用python和mongoengine)。我有一个对象,我想根据该对象的另一个属性应用不同类别的嵌入文档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
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)
另一个选项是覆盖训练的构造函数,并在那里实例化设置,但它不那么优雅