我想要几个“捆绑包”(Mjbundle),它们本质上是问题捆绑包(Mjquestion)。 Mjquestion 有一个整数“索引”属性,该属性需要是唯一的,但它只能在包含它的包中是唯一的。我不确定如何正确地建模这样的东西,我尝试使用下面的结构化(重复)属性来做到这一点,但实际上还没有任何东西限制 Mjquestion 索引的唯一性。更好/正常/正确的方法是什么?
class Mjquestion(ndb.Model):
"""This is a Mjquestion."""
index = ndb.IntegerProperty(indexed=True, required=True)
genre1 = ndb.IntegerProperty(indexed=False, required=True, choices=[1,2,3,4,5,6,7])
genre2 = ndb.IntegerProperty(indexed=False, required=True, choices=[1,2,3])
#(will add a bunch of more data properties later)
class Mjbundle(ndb.Model):
"""This is a Mjbundle."""
mjquestions = ndb.StructuredProperty(Mjquestion, repeated=True)
time = ndb.DateTimeProperty(auto_now_add=True)
(使用上述模型并获取某个 Mjbundle 实体,我不确定如何基于索引从 mjquestions 快速获取 Mjquestion。关于过滤结构化属性的解释看起来像是在 Mjbundle 类型级别上工作,而我已经有一个 Mjbundle 实体,并且不确定如何仅快速查询该实体包含的问题,而不用在代码中“手动”循环遍历所有问题。)
因此,我愿意接受任何有关如何做得更好的建议。
我读过这个信息性答案:https://stackoverflow.com/a/3855751/129202 https://stackoverflow.com/a/3855751/129202它给出了一些关于可扩展性的想法,在相关说明中,我预计只有几个捆绑包,但每个捆绑包都会有数千个问题。
也许我根本不应该使用 Mjbundle 的 mjquestions 属性,而应该关注父级:创建的每个 Mjquestion 应该有一个特定的 Mjbundle 实体作为父级。然后通过执行祖先查询“手动”在“插入时”强制执行唯一性。
当您使用 StructuredProperty 时,所有类型的实体都存储为包含实体的一部分 - 因此,当您获取捆绑包时,您已经获取了所有问题。如果您坚持这种存储方式,迭代签入代码就是解决方案。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)