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

时间:2016-06-08 15:56:25

标签: google-cloud-datastore gcloud-java

我使用新的gcloud-java API(https://github.com/GoogleCloudPlatform/gcloud-java/tree/master/gcloud-java-datastore/src/main/java/com/google/cloud/datastore)来使用Cloud Datastore。我的具体问题是使用GQL对游标进行分页。我能够使用游标一次向前翻页一页,但是没有任何运气可以向后翻页。

示例场景:

我们说我有20个实体,ID为1到20.我的页面大小为5.一旦我在第3页(ID 11到15),如果我需要退一页;即检索ID 6到10,什么是正确的GQL /示例代码?同样,我不想使用带数字的偏移,但是想使用游标。

从我所知道的(实际测试过的)看起来,当他们向前导航时,需要跟踪每个页面的开始/结束光标,然后在需要返回时使用保存的光标。我只是想确定这是否是正确的/唯一的方法,或者有一种更简单的方法来实现这一点。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

如果您按原样添加到原始查询中(附加到“order by”子句的末尾),您应该能够反转每个属性的排序顺序并使用原始查询中的最新光标来获得结果相反。

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