Frage

Ich habe gerade bemerkt ein seltsames Ergebnis aus einer Abfrage, die ich nicht verstehen haben. Es scheint, als ob Hinzufügen einer Bestellung () zu einer Abfrage, um die Ergebnisse zu begrenzen ich zurück .

Hier ist meine Interaktion:

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

Wie Sie sehen können, hundert Einheiten wurden zwischen den beiden Abfragen nicht hinzugefügt. Es scheint, wie die Reihenfolge () Befehl, die Ergebnismenge zu begrenzen. Aber created_at ist eine erforderliche Eigenschaft und ist in allen Einheiten.

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

Keine Ausnahmen. Also warum sollte die Abfrage mit der ORDER nicht alle Entitäten zurückgeben?

Schließlich untersucht, ob es fehlerhafte Daten sind:

>>> 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
War es hilfreich?

Lösung

Das Problem ist verschwunden, obwohl nicht meinen Code geändert hat. Die beste Vermutung ist, dass ich vielleicht der Index hinter fiel, obwohl ich angenommen hatte, dass, wenn ich eine erfolgreiche Rückkehr von put () erhalten dann die Indizes aktualisiert werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top