分页
|
这是 GraphQL Library 7 版本的文档。对于长期支持 (LTS) 版本 5,请参考 GraphQL Library 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
}
}
以此类推。
页面总数
您可以使用该类型的 count 查询获取记录总数,然后将该数字除以每页的条目数,以计算页面总数。这可以确定最后一页是哪一页,以及是否还有下一页。
有关如何执行这些查询的详细信息,请参阅 Count 查询。
基于游标的分页
在关联字段上,您可以利用基于游标的分页,这通常与无限滚动的应用程序相关联。
使用以下类型定义
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 ——这表示已到达数据的末尾。