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
È stato utile?

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.

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