理解に苦しむクエリの奇妙な結果に気付きました。order() をクエリに追加すると、返される結果が制限されているように見えます。
これが私の相互作用です:
>>> 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)
ご覧のとおり、2 つのクエリの間に 100 のエンティティが追加されていません。order() 命令が結果セットを制限しているようです。ただしcreated_at
、必須のプロパティであり、すべてのエンティティに存在します。
>>> count = 0
>>> for entity in SomeModel.all().filter('action =', 'foo'):
... if not entity.created_at:
... raise Exception, 'Not found!'
... count += 1
...
>>> print count
361
例外なく。では、ORDER を使用したクエリですべてのエンティティが返されないのはなぜでしょうか?
最後に、それが悪いデータかどうかを調査します。
>>> 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