我正在尝试使用Azure cosmosDB Java API . 我想以页面方式获取结果 . 例如:我们可以在Spring Data JPA中传递Pageable实例,并一次获取10个项目 . 我没有找到任何关于如何使用Spring-data-cosmosdb实现此目的的参考 . 我也无法使用此插件使用@Query(“”)注释 . 所以我不确定如何实现分页 .
任何帮助深表感谢 .
问候,
Venky
您可能能够在 FeedResponse 中表示的公开 continuation token 周围构建一些东西 .
FeedResponse
continuation token
FeedOptions queryOptions = new FeedOptions(); queryOptions.setPageSize(10); queryOptions.setRequestContinuation("continuation token from previous request"); FeedResponse<Document> queryResults = this.client.queryDocuments(collectionLink, "SELECT * FROM Family WHERE Family.lastName = 'Andersen'", queryOptions); string token = queryResults.getResponseContinuation()
This is an example of how you can do this in the C# SDK.我没有看到在Java中做同样事情的方法,所以你可能需要玩它 .
在CosmosDb中(或在大多数/任何NoSQL数据库中)没有简单的方法来完成这种类型的分页,因为skip / take实际上不是支持的查询模式 .
更常见的模式是以 continuation token 的形式保持对客户端上看到的最后一项的引用,可以在后续请求中将其发送回服务器 . 例如,用户请求前10个项目并获取结果集 . 第10项的标识符是 asdfb1231 . 获取第二个"page"的查询将包含此值,以便服务器端可以从此偏移量继续查询 .
asdfb1231
这已在其他地方广泛撰写 . 关于这个主题的我最喜欢的文章之一是由辉煌的严翠https://hackernoon.com/guys-were-doing-pagination-wrong-f6c18a91b232写的,我强烈推荐阅读 .
2 回答
您可能能够在
FeedResponse
中表示的公开continuation token
周围构建一些东西 .This is an example of how you can do this in the C# SDK.我没有看到在Java中做同样事情的方法,所以你可能需要玩它 .
在CosmosDb中(或在大多数/任何NoSQL数据库中)没有简单的方法来完成这种类型的分页,因为skip / take实际上不是支持的查询模式 .
更常见的模式是以
continuation token
的形式保持对客户端上看到的最后一项的引用,可以在后续请求中将其发送回服务器 . 例如,用户请求前10个项目并获取结果集 . 第10项的标识符是asdfb1231
. 获取第二个"page"的查询将包含此值,以便服务器端可以从此偏移量继续查询 .这已在其他地方广泛撰写 . 关于这个主题的我最喜欢的文章之一是由辉煌的严翠https://hackernoon.com/guys-were-doing-pagination-wrong-f6c18a91b232写的,我强烈推荐阅读 .