2011-01-25 33 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

我認爲發生這種情況是因爲不等式過濾器的計算結果爲ANY(如果至少有一個值是!='tag2',則爲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