Pergunta

Eu notei um resultado estranho para uma consulta que eu tenho dificuldade para entender. Parece como se adicionando uma ordem () para uma consulta é limitar os resultados eu voltar .

Aqui está a minha interação:

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

Como você pode ver, uma centena de entidades não foram adicionados entre as duas consultas. Parece que a instrução ordem () é limitar o conjunto de resultados. Mas created_at é uma propriedade necessária e está presente em todas as entidades.

>>> count = 0
>>> for entity in SomeModel.all().filter('action =', 'foo'):
...   if not entity.created_at:
...     raise Exception, 'Not found!'
...   count += 1
...
>>> print count
361

Sem exceções. Então, por que a consulta com o fim de não retornar todas as entidades?

Finalmente, investigando se é dados inválidos:

>>> 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
Foi útil?

Solução

O problema desapareceu apesar de não ter mudado o meu código. O melhor acho que tenho é que talvez o índice caiu para trás, embora eu tinha assumido que se eu conseguir um retorno bem sucedido de put (), em seguida, os índices são atualizados.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top