分页
这是 GraphQL 库版本 7 的文档。对于长期支持 (LTS) 版本 5,请参考GraphQL 库版本 5 LTS。 |
Neo4j GraphQL 库提供两种分页机制
-
基于偏移量的分页 - 基于偏移量的分页,通常与按页导航相关联。
-
基于游标的分页 - 基于游标的分页,通常与无限滚动应用程序相关联。
基于偏移量的分页
基于偏移量的分页,通常与按页导航相关联,可以通过在查询数据时使用 offset
和 limit
选项来实现。
使用以下类型定义
type User @node {
name: String!
}
通过执行以下操作获取每页 10 个数据的第一页
query {
users(limit: 10) {
name
}
}
然后在后续调用中,引入 offset
参数并在每次调用时将其递增 10。
获取第二页,使用
query {
users(offset: 10, limit: 10) {
name
}
}
获取第三页,使用
query {
users(offset: 20, limit: 10) {
name
}
}
依此类推。
基于游标的分页
在关系字段上,您可以利用基于游标的分页,这通常与无限滚动应用程序相关联。
使用以下类型定义
type User @node {
name: String!
posts: [Post!]! @relationship(type: "HAS_POST", direction: OUT)
}
type Post @node {
content: String!
}
如果您想一次获取用户“John Smith”的 10 个帖子,您首先需要获取 10 个
query {
users(where: { name: { eq: "John Smith" } }) {
name
postsConnection(first: 10) {
edges {
node {
content
}
}
pageInfo {
endCursor
hasNextPage
}
}
}
}
在返回值中,如果 hasNextPage
为 true
,您将把 endCursor
传递到下一个 10 个数据的查询中。您可以使用变量来做到这一点,例如在以下查询中的 $after
query Users($after: String) {
users(where: { name: { eq: "John Smith"} }) {
name
postsConnection(first: 10, after: $after) {
edges {
node {
content
}
}
pageInfo {
endCursor
hasNextPage
}
}
}
}
您可以继续,直到返回中的 hasNextPage
为 false
——这意味着您已到达数据的末尾。