【发布时间】:2015-08-28 04:15:13
【问题描述】:
我想要几个“捆绑包”(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 它提供了一些关于可扩展性的想法,并且在相关说明中,我预计只有几个捆绑包,但每个捆绑包都会有数千个问题。
也许我根本不应该使用 Mjbundle 的 mjquestions 属性,而是专注于养育:每个创建的 Mjquestion 都应该有一个特定的 Mjbundle 实体作为父代。然后通过执行祖先查询“手动”在“插入时”强制唯一性。
【问题讨论】:
-
第一个问题是什么决定了您的用例的独特性。它是整数还是捆绑的其他方面。每个捆绑包都可以是一个子实体(此处讨论数据存储键),您让数据存储生成 id。它是独一无二的。在所有儿童中。
标签: python google-app-engine unique google-cloud-datastore