0

自己参照プロパティを持つエンティティがあり、selfrefフィールドのキーにWHERE条件を指定して検索したいと思いました。私の意図は、キーのリストを作成し、同じエンティティを反復処理してネストされたリストを作成することにより、DBヒットを減らすことです。このリストを使用して、返したい結果セットのキャッシュされた辞書バージョンのmemcache.get_multi()をヒットしています。エンティティの短縮版は次のとおりです。

class Link(db.Model):     
    member = db.ReferenceProperty(Member)     
    url = db.TextProperty()   
    title = db.StringProperty()   
    category =db.SelfReferenceProperty()

アクセス情報を格納する別のエンティティに基づいて、「カテゴリ」キーディクショナリを作成しました。私がやりたいことは次のようなものです:

for categoryKey in accessDict:  
    categoryDBKey = db.Key(categoryKey)  
    q = db.GqlQuery('SELECT __key__ FROM Link WHERE category.key() = :1',categoryDBKey )  

for qItem in q:  
    cacheList.append('Link_' + str(qItem))  
    dataCache = memcache.get_multi(cacheList)

しかし、「BadQueryError:Parse Error:InvalidWHERECondition」エラーが発生します。

カテゴリエンティティ全体を次の場所に渡すことができます。

for categoryKey in accessDict:  
    category = db.ket(db.Key(categoryKey))  
    q = db.GqlQuery('SELECT __key__ FROM Link WHERE category = :1',category)

ただし、フィルタリングしたいカテゴリのキー値がすでにある場合は、RPCが無駄になっているように見えます。

参照プロパティのキーにWHERE条件を使用する方法はありますか?

ありがとう

4

1 に答える 1

2

参照プロパティはキーとして保存されるため、直接比較できます。

for categoryKey in accessDict:  
    q = db.GqlQuery('SELECT __key__ FROM Link WHERE category = :1', db.Key(categoryKey))
于 2010-09-08T02:46:41.063 に答える