Question

Je viens de remarquer un résultat étrange d'une requête que j'ai du mal à comprendre. Il semble que l'ajout d'un ordre () à une requête limite les résultats que je reçois de retour .

Voici mon interaction:

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

Comme vous pouvez le voir, une centaine d'entités ne sont pas ajoutés entre les deux requêtes. Il semble que l'instruction order () limite le jeu de résultats. Mais created_at est une propriété nécessaire et est présente dans toutes les entités.

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

Aucune exception. Alors, pourquoi la requête avec l'ordre de ne retourner toutes les entités?

Enfin, l'enquête si elle est mauvaise données:

>>> 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
Était-ce utile?

La solution

Le problème a disparu en dépit de ne pas avoir changé mon code. La meilleure estimation que j'ai est que peut-être l'indice est tombé en arrière, même si je l'avais supposé que si je reçois un retour réussi de vente () puis les index sont mis à jour.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top