Objectify的SimpleQuery.endAt()的确切语义是什么?文档说它"在指定的Cursor"处结束查询结果。 (https://code.google.com/p/objectify-appengine/source/browse/src/main/java/com/googlecode/objectify/cmd/SimpleQuery.java?r=a7402d1a9308fbb7b9fd6cb687e43be091d1bcb0#73),可以用两种方式解释。
假设光标指向结果C并且我将查询限制设置为X. endAt()将返回[C-X,C]或[0,min(X,C)]范围内的结果?也就是说,它是从光标的X结果开始并始终在光标处结束,还是始终从头开始?
编辑: 文档让我觉得它会是前者,但我在实践中观察到的是后者的行为。这意味着要正确实现搜索结果的分页,必须跟踪所有游标,而不仅仅是最近的两个游标。这很好,但我认为文档应该更加明确。
答案 0 :(得分:0)
Objectify endAt()
只是将光标传递给低级API FetchOptions.endCursor()
; limit()
只是将值传递给FetchOptions.limit()
。该交互由Google定义,似乎没有记录。我能找到的最相关的部分是:
https://cloud.google.com/appengine/docs/java/datastore/queries#Java_Query_cursors
我会问一下appengine google group,或者可能会将另一个stackoverflow问题转发给GAE(删除Objectify和Java特有的性质)。幸运的是,有人知道 - 可能在GAE / Python社区,它比GAE / Java社区稍大。