Python 查找包含确切成员列表的组的有效方法
我的应用程序有一个组模型,该组模型有一个包含成员密钥列表的members属性。我想找到包含确切成员列表的组。我正试图找到一个有效的方法来做到这一点。我下面的方法可以工作,但速度很慢,特别是由于函数中的循环。有更好的方法吗?我应该用不同的方式来建模吗 这是我的团队模型Python 查找包含确切成员列表的组的有效方法,python,google-app-engine,google-cloud-datastore,app-engine-ndb,Python,Google App Engine,Google Cloud Datastore,App Engine Ndb,我的应用程序有一个组模型,该组模型有一个包含成员密钥列表的members属性。我想找到包含确切成员列表的组。我正试图找到一个有效的方法来做到这一点。我下面的方法可以工作,但速度很慢,特别是由于函数中的循环。有更好的方法吗?我应该用不同的方式来建模吗 这是我的团队模型 class Group(ndb.Model): members = ndb.KeyProperty(kind='User', repeated=True) 下面是查找包含一组成员的组的函数 def get_group_wi
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
您可以连接成员ID的排序列表,并将其存储为组的属性。以查询时相同的方式构造筛选器值将允许您仅返回完全匹配的组。如果成员列表的长度或用户ID的长度意味着这些连接的值对于StringProperty来说太长,那么您可以散列这些值。并使用ComputedProperty,所以您不必显式地管理此属性。唯一的问题是,如果组成员的密钥总长度开始达到1MB,则此属性将无法扩展。