2017-06-14 43 views
0

Documentation > Datastore Queries > Limitations of cursors谷歌云存储:使用光标在反向查询

  • 排序顺序

    一个例外是,如果原始查询的最终排序顺序是在__key__。在这种情况下,您可以在反向查询中使用游标,这是原始查询,每个排序顺序都是相反的。反向查询可以修改开始游标,结束游标,偏移量和限制。

虽然指出,只有__key__可以以相反的顺序使用,它似乎也是在创建自定义索引另一个属性可用。我在开发环境和生产环境中都尝试过它。

是什么意思“如果原始查询的最终排序顺序在__key__上,则是一个例外。” ?

回答

0

让我用一个简单的例子阐明这一点:

比方说,你有一个查询(省略光标/限制语法) -

SELECT * FROM MyEntity ORDER BY PROP1 ASC 

现在的要求是,你需要遍历无论是在前进并反向并使用光标。

你需要做的第一件事情就是修改您的查询有__key__作为最后的排序 -

SELECT * FROM Entity ORDER BY PROP1 ASC, __key__ ASC 

可以遍历向前正常使用游标,但是当你需要向后遍历,你需要通过颠倒排序顺序来执行查询。您仍然可以使用您所在页面的相同光标。因此,查询将变为我们已经改变ASC endng为了DESC结局

SELECT * FROM Entity ORDER BY PROP1 DESC, __key__ DESC 

通知。

这实际上会给你从当前光标位置以前的记录。为了达到此目的,您需要具有适当的组合索引(例如,按照DESC顺序,在PROP1__key__之一)。当然,您也可以将其他属性添加到排序顺序中,或者从示例中删除PROP1,如果您对按键排序的结果没有问题。

作为最后一种类型时,您将无法使用以相反顺序查询进行前进时获得的游标。这就是“例外”规则。

+0

谢谢!对于按排序顺序不使用__key__的查询,只能使用ASC中获得的游标,使用DESC检索数据一次? – Mentha

+0

如果没有将键作为最后(或唯一)排序,则在切换排序顺序时会导致错误的结果。 –

+0

非常感谢。 问题解决了。 – Mentha