我有两个模型:成员和事件。一个成员(member)可以参与多个事件,一个事件中有很多参与者。我是这样想的:
class Members(ndb.model):
event = ndb.KeyProperty(repeated=True)
class Events(ndb.model):
member = ndb.KeyProperty(repeated=True)
建立多对多关系的最佳方式是什么?
最佳答案
我认为在这种情况下,您希望在一个模型中有一个指向另一个模型的键数组/列表。由于数组/列表的长度有限制(现在最大值为 5000),您可能希望成员模型指向事件模型(我假设成员可能不会参加很多事件(超过5000),但有很多(超过 5000 名)成员参加事件)。现在,如果您想要与会者列表,只需在成员模型中查询事件键即可。如果您只需要人数,可以进行仅键查询,这样可以节省成本。
如果出于某种原因您需要让两种情况都超过 5000,那么您可以制作另一个包含成员键和事件键的(与会者)模型,然后为每个事件的每位 guest 制作此与会者模型。要获取客人列表,只需针对特定事件查询此模型,如果您需要成员的事件列表,则执行相反的操作。这并不比上面的工作多多少,所以即使 5000 不是限制因素,这也可能是您的首选方式。
关于google-app-engine - Google App Engine Datastore (ndb) 中的多对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13565189/