使用光标向后分页工作但缺少一个项目 [英] Backward pagination with cursor is working but missing an item
问题描述
从 寻找提供与 GAE 数据存储查询匹配的页面/项目计数/项目导航的想法/替代方法,我可以找到一个提示,说明如何通过 REVERSING ORDER 使用单个光标向后页面导航.
From looking for ideas/alternatives to providing a page/item count/navigation of items matching a GAE datastore query, I could find a hint how to backward page navigation with a single cursor by REVERSING ORDER.
class CursorTests(test_utils.NDBTest):
def testFirst(self):
class Bar(model.Model):
value = model.IntegerProperty()
self.entities = []
for i in range(10):
e = Bar(value=i)
e.put()
self.entities.append(e)
q = Bar.query()
bars, next_cursor, more = q.order(Bar.key).fetch_page(3)
barz, another_cursor, more2 = q.order(-Bar.key).fetch_page(3, start_cursor=next_cursor)
self.assertEqual(len(bars), len(barz))
不幸的是它因这个错误而失败.
Unfortunately it failed with this error.
回溯(最近一次调用最后一次):文件"/Users/reiot/Documents/Works/appengine-ndb-experiment/ndb/query_test.py",第 32 行,在 testFirst 中self.assertEqual(len(bars), len(baz)) AssertionError: 3 != 2
Traceback (most recent call last): File "/Users/reiot/Documents/Works/appengine-ndb-experiment/ndb/query_test.py", line 32, in testFirst self.assertEqual(len(bars), len(baz)) AssertionError: 3 != 2
是的,反向查询缺少边界中的项目.
Yes, an item in boundary is missing with reverse query.
bars = [Bar(key=Key('Bar', 1), value=0), Bar(key=Key('Bar', 2), value=1), Bar(key=Key('Bar', 3), value=2)]
bars = [Bar(key=Key('Bar', 2), value=1), Bar(key=Key('Bar', 1), value=0)]
我该如何解决这个问题?
How can I fix this problem?
推荐答案
好的,这是官方的答案.需要反转"光标,如下:
Ok, here's the official answer. You need to "reverse" the cursor, as follows:
rev_cursor = cursor.reversed()
我自己也不知道.:-( 我会确保这显示在 fetch_page() 的文档中.
I did not know this myself. :-( I'll make sure this is shown in the docs for fetch_page().
这篇关于使用光标向后分页工作但缺少一个项目的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!