query/gqlquery .order () 결과 세트를 제한 하시겠습니까?
-
18-09-2019 - |
문제
방금 이해하는 데 어려움이 있다는 쿼리에서 이상한 결과를 발견했습니다. 마치 마치 마치 보입니다 쿼리에 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
해결책
내 코드를 변경하지 않았음에도 불구하고 문제가 사라졌습니다. 내가 가진 가장 좋은 추측은 put ()에서 성공적인 수익을 얻으면 인덱스가 업데이트된다고 가정했지만 인덱스가 뒤처 졌다는 것입니다.
제휴하지 않습니다 StackOverflow