Google app engine Query/GqlQuery.order()是否限制结果集?
我刚刚注意到一个奇怪的查询结果,我很难理解。似乎向查询中添加order()会限制返回的结果 以下是我的互动:Google app engine Query/GqlQuery.order()是否限制结果集?,google-app-engine,google-cloud-datastore,gql,Google App Engine,Google Cloud Datastore,Gql,我刚刚注意到一个奇怪的查询结果,我很难理解。似乎向查询中添加order()会限制返回的结果 以下是我的互动: >>> SomeModel.all().filter('action =', 'foo').order('created_at').count(), SomeModel.all().filter('action =', 'foo').count() (192L, 293L) >>> SomeModel.all().filter('action
>>> 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()指令限制了结果集。但在处创建的是必需的属性,并且存在于所有实体中
>>> 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
尽管没有更改我的代码,但问题已消失。我最好的猜测是,可能索引落后了,尽管我假设如果我从put()成功返回,那么索引就会更新。看起来我总是做空100个实体,所以这可能是错误的数据。我会更新。如果您使用len(SomeModel.all().filter('action=','foo').order('created_at').fetch())而不是count,您还会遇到同样的问题吗?如果是,您可以尝试查看排序正在删除的实体类型。