我有一系列博客文章作为实体。我会收到一个如下所示的网址:/blog/page/1
。在这种情况下,我想访问最近的5个帖子。在/blog/page/2
的情况下,我想要最近的6-10。
所以请允许我做X-Y,因为我认为这是唯一的方法:
如何在使用Google Cloud Platform Datastore的众多实体中找到最大值? (我使用ndb
)
我可以为每个实体提供ID值,然后从ID < maxIndex - page * 5
按ID
排序的查询中获取5。
但是,如何找到maxIndex
?我是否从ID
订购的查询中获取1,找到它ID
,然后运行上一个操作?对于每个网页浏览来说,这似乎有点慢。
我怎样才能A)快速找到最大索引或B)否则实施分页?
谢谢!
答案 0 :(得分:1)
对于游标,您可以使用数据存储区条目来存储游标,然后来回发送数据存储区密钥。通过发布请求发送数据来模糊它是另一种选择。
要回答您的原始问题:要获取顶部条目,请使用sort limit进行查询。这实际上会读取所有数据存储条目,因此您应该执行{{ 3}}搜索获取ID(密钥只是免费的)然后获得实际的帖子。所以像这样:
class IndexPage(webapp2.RequestHandler):
def get(self):
maxIndex = Posts.query().order(-Posts.PostIndex).fetch(limit=1, keys_only=True)[0].get().PostIndex
page_number = 0
post_lists = getPageResults(maxIndex, page_number)
while len(post_lists) > 1:
self.response.write("====================PAGE NUMBER %i===================</br>" % page_number)
for post in post_lists:
self.response.write(str(post.get().PostIndex) + "</br>")
page_number += 1
post_lists = getPageResults(maxIndex, page_number)
def getPageResults(maxIndex, page):
index_range = (maxIndex - (page*5))
post_index_list = range(index_range, index_range-5, -1)
return Posts.query(Posts.PostIndex.IN(post_index_list)).order(-Posts.PostIndex).fetch(limit=5, keys_only=True)
请记住,我在几分钟内将它们放在一起,以说明使用keys_only和我上面提到的其他几点。