GQL: Non uguale filtro su una proprietà multivalore
-
24-10-2019 - |
Domanda
Armeggiare un po 'con datastore di GAE ho trovato che non riesco a pensare un modo corretto di Filtro out risultati utilizzando il filtro diseguaglianza '=!' Su una proprietà multivalore:
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' """)
Il problema è che la query dei rendimenti sia in e1 e e2 , ma voglio solo e2 .
Credo che questo accade perché i Esamina filtro disuguaglianza come qualsiasi (TRUE se almeno un valore è! C'è un modo per applicare il filtro a TUTTI? (TRUE se tutti i valori sono! = 'Tag2 = 'tag2'. ')?
So che datastore di GAE non è relazionale, ma mi piacerebbe sapere come risolvere abilmente / credo che questo tipo di query.
Grazie;)
Soluzione
Ci ho pensato questo un gruppo e non credo che ci sia un buon modo per farlo (per favore correggetemi se sbaglio). La mia soluzione non-intelligente è di non usare StringListProperty ed a cascata una serie di filtri:
class Entry(db.Model):
...
tag_1 = db.StringProperty();
tag_2 = db.StringProperty();
...
Entry.all().filter('tag_1 !=', tag).filter('tag_2 !=', tag) ...
Non ho intenzione di cominciare a descrivere i problemi evidenti con questa soluzione, ma almeno lo fa ciò che si vuole.