Query / GqlQuery .order () restreignant le jeu de résultats?
-
18-09-2019 - |
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
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.