使用JDOQL唯一结果集进行查询

时间:2010-12-09 17:48:59

标签: google-app-engine google-cloud-datastore set jdoql

在我的GAE应用程序中,我想创建一个JDOQL,它返回一个List,其中每个元素最多只存在一次,即使在数据库中还有更多。我怎么能这样做?

1 个答案:

答案 0 :(得分:0)

我不了解JDOQL,但是如果你想要一个列表,其中每个实体最多存在一次,即每个列表元素都是唯一的,那么你可以执行以下操作:

假设您有一个我们称之为Type的权限类型/模型类,其属性为att1,attr2。 您希望基于一个或多个属性获得一个唯一元素列表,例如attr2。

你可以使用我从这个问题的良好来源改编的以下方法:

def unique(seq, idfun=None):  
        ''' A function that returns a list of unique items in a very efficient manner  
        Refer to : http://www.peterbe.com/plog/uniqifiers-benchmark ''' 
        # order preserving 
        if idfun is None: 
                def idfun(x): return x 
        seen = {} 
        result = [] 
        for item in seq: 
                marker = idfun(item) 
                # in old Python versions: 
                # if seen.has_key(marker) 
                # but in new ones: 
                if marker in seen: continue 
                seen[marker] = 1 
                result.append(item) 
        return result 

要从数据存储区类型获取基于attr2的类型的唯一元素列表,我可以执行以下操作:

list = Type.all()

unique_list = unique(list,lambda t: t.attr2)

希望这有帮助,因为到目前为止它一直是我最好的方法。