2017-03-22 1 views
0

얻기 내가 구글 앱 엔진의 데이터 저장소에서 다음과 같은 모델을 말해봐 :에 (가장 처음 투표 수를 기준으로 정렬 된 모든 게시물을 얻을 포스트를 조회 할구글 앱 엔진 데이터 저장소 쿼리 및 상대 순위

class Post(ndb.Model): 
    name = ndb.StringProperty() 
    votes = ndb.IntegerPropery() 

을 가장 낮은) 그리고 이름이 "John"인 게시물의 순위/장소를 찾으십시오. John에 의한 게시물이 2 번째로 많은 표를 얻는다면 그는 2 위를 차지할 것입니다.

쉬운 방법이 있나요? 나는이이 작업을 수행 할 수있는 아주 좋은/효율적인 방법이 아니다 상상

posts = Post.query().order(-Post.votes) 
for post, index in enumerate(posts): 
    if post.name == "John": 
    print(index) 

: 는 지금은 같은 것을하고 있어요.

답변

0

게시물의 총 수는 매우 높은 존이라는 사람은 이런 일을 수행하는 것이 더 효율적이 될 수있는 몇 가지 경우 : 당신이 것 때문에

total_posts = len(Post.query().fetch(keys_only=True)) 

john_posts = Post.query(Post.name == 'John') 
for post in john_posts: 
    # find out how many posts have higher votes than this post 
    rank = len(Post.query(Post.votes > post.votes).fetch(keys_only=True)) 
    print('%d out of %d' % (rank, total_posts)) 

는 또한, 저렴됩니다 DB에서 읽는 것만으로 John-named posts (유료 DB 작업) - keys_only 쿼리는 무료입니다.

전체 목록에서 실제 색인이 아닙니다. 동일한 투표 수의 게시물에 대해 동일한 순위를 얻습니다.