0

理解に苦しむクエリの奇妙な結果に気付きました。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
4

1 に答える 1

0

コードを変更していないにもかかわらず、問題は解消されました。私が持っている最良の推測は、インデックスが遅れた可能性があるということですが、 put() から正常に返された場合、インデックスが更新されると想定していました。

于 2009-11-11T13:30:04.233 に答える