2009-11-07 42 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()获得成功的返回,那么索引将被更新。