Google App Engine数据存储区查询和获得相对排名

时间:2017-03-22 16:08:48

标签: google-app-engine ranking datastore

假设我在Google App Engine的数据存储区中有以下模型:

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

我想首先查询Post以获得按投票数量排序的所有帖子(从最高到最低),然后找到帖子的排名/地点,名称为" John"。 因此,如果约翰的帖子获得第二多的选票,那么他将获得第二名。

有一种简单的方法吗? 现在我正在做类似的事情:

rank

我认为这不是一个非常好/有效的方法。

1 个答案:

答案 0 :(得分:0)

如果帖子的总数非常高而名为John的帖子数量很少,那么可能会更有效地执行以下操作:

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))

它也会更便宜,因为你只能从数据库中读取John命名的帖子(付费的DB操作) - keys_only查询是免费的。

虽然它不是总列表中的实际索引 - 但是对于具有相同票数的帖子,您的排名会相同。