查找包含完整成员列表的组的有效方法

时间:2014-03-13 21:44:03

标签: python google-app-engine google-cloud-datastore app-engine-ndb

我的应用有一个组模型,其成员属性包含成员键列表。我想找到包含确切成员列表的组。我试图找到一种有效的方法来做到这一点。我下面的方法有效,但速度很慢,特别是由于函数中的循环。有没有更好的方法来做到这一点?我应该以不同的方式进行建模吗?

这是我的小组模特。

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

1 个答案:

答案 0 :(得分:2)

您可以连接成员ID的排序列表,并将其存储为组的属性。在查询时以相同的方式构造过滤器值将允许您仅返回完全匹配的组。如果您的成员列表的长度或用户ID的长度意味着这些连接值对于StringProperty来说太长,那么您可以对值进行散列。