我的应用有一个组模型,其成员属性包含成员键列表。我想找到包含确切成员列表的组。我试图找到一种有效的方法来做到这一点。我下面的方法有效,但速度很慢,特别是由于函数中的循环。有没有更好的方法来做到这一点?我应该以不同的方式进行建模吗?
这是我的小组模特。
class Group(ndb.Model):
members = ndb.KeyProperty(kind='User', repeated=True)
这里是查找包含一组成员的组的功能。
def get_group_with_members(members):
groups_for_one_member = Group.query(Group.members == members[0].key)
# Get list of member keys.
member_keys = [member.key for member in members]
# Loop through groups of one member to see if any groups contain all the members.
for group in groups_for_one_member:
if set(group.members) == set(member_keys):
return group
return None
答案 0 :(得分:2)
您可以连接成员ID的排序列表,并将其存储为组的属性。在查询时以相同的方式构造过滤器值将允许您仅返回完全匹配的组。如果您的成员列表的长度或用户ID的长度意味着这些连接值对于StringProperty来说太长,那么您可以对值进行散列。