Query / GqlQuery .order () limitando il set di risultati?
-
18-09-2019 - |
Domanda
Ho appena notato un risultato strano da una query che ho difficoltà a capire. Sembra come se l'aggiunta di un ordine () per una query è limitando i risultati che ottengo indietro .
Ecco la mia interazione:
>>> SomeModel.all().filter('action =', 'foo').order('created_at').count(),
SomeModel.all().filter('action =', 'foo').count()
(192L, 293L)
>>> SomeModel.all().filter('action =', 'foo').order('created_at').count(),
SomeModel.all().filter('action =', 'foo').count()
(193L, 294L)
Come si può vedere, un centinaio di soggetti non sono stati aggiunti tra i due query. Sembra che l'istruzione di ordine () è limitare il set di risultati. Ma created_at
è una struttura necessaria ed è presente in tutte le entità.
>>> count = 0
>>> for entity in SomeModel.all().filter('action =', 'foo'):
... if not entity.created_at:
... raise Exception, 'Not found!'
... count += 1
...
>>> print count
361
Non ci sono eccezioni. Allora, perché sarebbe la query con l'ordine non restituire tutte le entità?
Infine, indagando se si tratta di dati non validi:
>>> print "ascending=%d no-filter=%d descending=%d" % (
SomeModel.all().filter('action =', 'foo').order('created_at').count(),
SomeModel.all().filter('action =', 'foo').count(),
SomeModel.all().filter('action =', 'foo').order('-created_at').count())
ascending=79 no-filter=179 descending=173
Soluzione
Il problema è scomparso nonostante non abbia cambiato il mio codice. L'ipotesi migliore che ho è che forse l'indice è sceso alle spalle, anche se ho dato per scontato che se ho un ritorno di successo da put () allora gli indici vengono aggiornate.