我在这,我用一个型号有许多需要的所有实体和一些特定于两个备选方案中的一个,就像在下面的例子中性能的情况经常型号:为Expando VS空白的属性
class Machine(ndb.Model):
#Properties for all machines:
price = ndb.FloatProperty()
model = ndb.StringProperty()
vendor = ndb.KeyProperty()
#...
#Properties exclusive to type A machines:
foo1 = ndb.StringProperty()
foo2 = ndb.StringProperty()
#Properties exclusive to type B machines:
bar1 = ndb.StringProperty()
bar2 = ndb.StringProperty()
从我所理解的,我可以采取两种途径之一。要么我把它定义为一个常规的ndb.Model,只留下一些没有内容的属性,或者我可以使用一个ndb.Expando模型,并提前设置固定属性,并根据具体情况添加其他属性。
据我所知,当您不知道您需要的属性时,Expando Model很有用,但我事先知道所需的所有属性(foo1,foo2,bar1,bar2)。我应该使用Expando还是使用常规的ndb.Model并为每个实体留下一些属性为空?
感谢您的回答!如果Machine是StructuredProperty,我也可以这样做吗?我也有这种情况发生,完全像这样,而不是Machine是一个完整的实体,它是一个StructuredProperty(一个更大的实体内的属性)。在这种情况下,我仍然可以按照你的建议去做吗? –
虽然最终的结果可能相似,但方法不同,各有优缺点。在嵌套重复属性方面存在一些限制,并且对于嵌套的结构化属性的项目的查询在许多场景中无法按照您喜欢的方式工作。 –
在我的情况下,他们没有太多数据,它只与实体相关,并且从我测试过的数据来看,它足以用于查询目的。我的意思是有这样的例子:class“Things”具有结构化属性Machine有两种类型:MachineA和MachineB。这是可能的还是应该避免它? –