문제

방금 이해하는 데 어려움이 있다는 쿼리에서 이상한 결과를 발견했습니다. 마치 마치 마치 보입니다 쿼리에 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 ()에서 성공적인 수익을 얻으면 인덱스가 업데이트된다고 가정했지만 인덱스가 뒤처 졌다는 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top