我有两个模型:会员和活动。会员可以参加许多活动,在一个活动中,有很多参与者。我想是这样的:
class Members(ndb.model):
event = ndb.KeyProperty(repeated=True)
class Events(ndb.model):
member = ndb.KeyProperty(repeated=True)
做多对多关系的最佳方式是什么?
答案 0 :(得分:13)
我认为在这种情况下,您希望在一个模型中有一个指向另一个模型的数组/键列表。由于数组/列表的长度有限制(现在最大值为5000),您可能希望成员模型指向事件模型(我假设成员可能不会参加很多事件(超过5000),但在一个活动中有很多(超过5000)成员)。现在,如果您需要与会者列表,则只需在成员模型中查询事件键。如果您只想要人头数,则可以执行仅密钥查询,这样可以节省成本。
如果出于某种原因需要两个案例都超过5000,那么您可以创建包含成员密钥和事件密钥的另一个(与会者)模型,然后为每个事件为每个访客创建此与会者模型。要获取访客列表,只需查询此模型以查找特定事件,如果需要成员事件列表,请执行相反操作。这并不比上面的工作多得多,所以即使5000不是限制因素,你也可以这样做。