2009-11-07 60 views
0

我剛剛注意到一個奇怪的結果,我很難理解這個查詢。看起來好像向查詢添加一個命令()會限制我返回的結果。Query/GqlQuery .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) 

正如你所看到的,並沒有這兩個查詢之間增加了一百實體。看起來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 
+0

看起來我總是短100個實體,所以這可能是不好的數據。我會更新。 – JasonSmith 2009-11-07 02:58:39

+0

如果不是你使用len(SomeModel.all()。filter('action =','foo').order('created_at').fetch()),你還會遇到同樣的問題嗎?如果是的話,你可以嘗試查看訂單正在下降的實體類型。 – Bemmu 2009-11-10 09:14:58

回答

0

的問題已經消失。我最好的猜測是,也許索引落後了,儘管我假設如果我從put()獲得成功的返回,那麼索引將被更新。