如何使用游标使用 GQL 和新的 gcloud-java API 导航到之前的页面?

How to use cursors for navigating to previous pages using GQL and the new gcloud-java API?

我正在使用新的 gcloud-java API (https://github.com/GoogleCloudPlatform/gcloud-java/tree/master/gcloud-java-datastore/src/main/java/com/google/cloud/datastore) 来处理云数据存储。我的具体问题是使用 GQL 对游标进行分页。我能够使用游标一次一页地翻阅结果,但无法向后翻页。

示例场景:

假设我有 20 个 ID 为 1 到 20 的实体。我的页面大小为 5。一旦我进入第 3 页(ID 为 11 到 15),如果我需要去一个回页;即检索 ID 6 到 10,正确的 GQL/sample 代码是什么?同样,我不喜欢将偏移量与数字一起使用,但想使用游标。

据我所知(实际测试),看起来需要在每个页面向前导航时跟踪 Start/End 光标,然后在有需要回去。我只是想确定这是 correct/only 方法还是有更简单的方法来完成此操作。

在此先感谢您的帮助。

如果您在原始查询中添加按键排序(附加到 "order by" 子句的末尾),您应该能够反转每个 属性 的排序顺序并使用原始查询中的最新游标以反向获取结果。

假设您已经迭代了前向查询 QueryResults 中的一些值。您可以调用 QueryResultscursorAfter() 方法,该方法将 return 光标指向您从原始查询中看到的最后一个结果。现在您可以使用该游标作为起始游标发出一个新查询(在每个 属性 上使用相反的排序顺序,包括键 属性)。您可能希望跳过第一个结果,因为它将是您从原始查询中看到的最后一个结果。