Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 查找包含确切成员列表的组的有效方法_Python_Google App Engine_Google Cloud Datastore_App Engine Ndb - Fatal编程技术网

Python 查找包含确切成员列表的组的有效方法

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

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

这是我的团队模型

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,则此属性将无法扩展。