6

我有两个模型:成员和事件。一个成员可以参加许多活动,而在一个活动中,有许多参与者。我这样想:

class Members(ndb.model):
    event = ndb.KeyProperty(repeated=True)

class Events(ndb.model):
    member = ndb.KeyProperty(repeated=True)

建立多对多关系的最佳方式是什么?

4

1 回答 1

13

我认为在这种情况下,您希望一个模型中的键数组/列表指向另一个模型。由于数组/列表的长度有限制(现在最大为 5000),您可能希望成员模型指向事件模型(我假设成员可能不会参加很多活动(超过5000),但有很多(超过 5000 名)成员参加活动)。现在,如果您想要与会者列表,您只需在成员模型中查询事件键即可。如果您只想要人数,您可以只进行键查询,这将节省成本。

如果由于某种原因您需要使两个案例都超过 5000,那么您可以制作另一个(参与者)模型,其中包含一个成员密钥和一个活动密钥,然后为每个活动的每位客人制作此参与者模型。要获取客人列表,只需在此模型中查询特定事件,如果您需要成员的事件列表,则相反。这并不比上面的工作多多少,所以即使 5000 不是限制因素,你也可能会这样做。

于 2012-11-26T13:01:12.537 回答