我刚刚从一个查询中注意到一个奇怪的结果,我很难理解。似乎向查询中添加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)
如您所见,两个查询之间没有添加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
没有例外。那么,为什么带有订单的查询不会返回所有实体呢?
最后,调查它是否是糟糕的数据:
>>> 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
发布于 2009-11-11 13:30:04
尽管没有修改我的代码,问题还是消失了。最好的猜测是,索引可能落后了,尽管我假设如果我从put()获得了成功的返回,那么索引就会被更新。
https://stackoverflow.com/questions/1691792
复制相似问题