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;)

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top