GAE のデータストアを少しいじってみると、多値プロパティで不等式フィルター '!=' を使用して結果をフィルター処理する適切な方法を考えられないことがわかりました。
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' """)
問題は、このクエリがe1とe2の両方を返すことですが、必要なのはe2だけです。
これは、不等式フィルターが ANY (少なくとも 1 つの値が != 'tag2' である場合は TRUE) として評価されるために発生すると思います。ALL にフィルターを適用する方法はありますか? (すべての値が != 'tag2' である場合は TRUE)?
GAE のデータストアがリレーショナルではないことは知っていますが、この種のクエリを巧みに解決/考える方法を知りたいです。
ありがとう ;)