2011-01-25 9 views
2

GAEのデータストアでちょっと試練しましたの結果をフィルタリングするには適切な方法が考えられませんでした。複数値のプロパティで '!=GQL:複数値のプロパティで等しくないフィルタ

class Entry(db.Model): 
    ... 
    tags = db.StringListProperty() 

e1 = Entry() 
e2 = Entry() 
e1.tags = ['tag1', 'tag2', 'tag3'] 
e2.tags = ['tag1', 'tag3', 'tag4'] 

# I want to exclude all the results containing 'tag2' 
db.GqlQuery("""SELECT * FROM Entry 
       WHERE tags != 'tag2' """) 

問題は、このクエリはE1E2の両方を返しますが、私は唯一のE2をしたいということです。

少なくとも1つの値が!= 'tag2'であれば、不等式フィルタはANY(TRUE)と評価されるため、これは起こると思います。ALLにフィルタを適用する方法はありますか(すべての値が!= ' TAG2' )

私はGAEのデータストアは、リレーショナルではないことを知っているが、私は巧みに、クエリのこの種を考える/解決する方法を知りたいのですが

感謝;?。)

答えて

0

私がについて考えてきましたこれは束と私はそれを行う良い方法があるとは思わない(私は間違っている場合は私を修正してください)。私の非巧妙な解決策は、StringListPropertyを使用しないように、フィルターの束をカスケード接続することである。

class Entry(db.Model): 
    ... 
    tag_1 = db.StringProperty(); 
    tag_2 = db.StringProperty(); 
    ... 
Entry.all().filter('tag_1 !=', tag).filter('tag_2 !=', tag) ... 

私は、このソリューションで明らかな問題を記述するために開始するつもりはないが、少なくとも、それはあなたが望むものを行います。

+0

ありがとうございます、私は別の(簡単な)方法で私の問題を解決しました。 –

+1

Gianluca Bargelli。私や他の人を助けるソリューションを分かち合いたいですか? – luckykrrish

関連する問題