使用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(如果至少有一个值为!='tag2'则为TRUE。有一种方法可以将过滤器应用于ALL?(如果所有值均为!=',则为TRUE} “)?
我知道GAE的数据存储区不是关系型的,但我想知道如何巧妙地解决/思考这类查询。
谢谢;)
答案 0 :(得分:0)
我已经考虑了这一堆,我认为没有一个好方法可以做到(如果我错了请纠正我)。我的非聪明的解决方案是不使用StringListProperty并级联一堆过滤器:
class Entry(db.Model):
...
tag_1 = db.StringProperty();
tag_2 = db.StringProperty();
...
Entry.all().filter('tag_1 !=', tag).filter('tag_2 !=', tag) ...
我不会开始描述此解决方案的明显问题,但至少它可以满足您的需求。