集合查询实现了基于游标的分页。客户端指定一个结果限制参数(使用 first 或 last)和一个对应的游标参数(使用 after 或 before),该游标是指向上一页结果中最后一项的指针。
这两个参数都是可选的。如果省略结果限制,将返回最多 10 个结果。如果省略游标,结果将从第一个匹配项开始。
一个 pageInfo 对象可用于集合查询,并可用于正向和反向分页。
除了pageInfo,查询结果中的每个边缘都提供一个cursor字段,也可以用于分页。
下表描述了 pageInfo 对象上可用的属性:
字段 | 类型 | 描述 |
|---|---|---|
hasNextPage | boolean | 在正向分页时,指示是否有另一页的结果可用。 |
hasPreviousPage | boolean | 在反向分页时,指示是否有另一页的结果可用。 |
startCursor | string | 结果集中第一项的游标。 |
endCursor | string | 结果集中最后一项的游标。 |
要在正向方向上分页查询结果,使用 first 和 after 参数,结合 PageInfo 的 endCursor。
这里我们将查询我们的 post 集合,使用 postConnection,将页面大小限制为 1,并从第二项开始:
{postConnection(sort: "date", first: 1, after: "cG9zdCNkYXRlIzE2NTUyNzY0MDAwMDAjY29udGVudC9wb3N0cy92b3RlRm9yUGVkcm8uanNvbg==") {edges {node {idtitledate}}pageInfo {hasNextPageendCursor}}}
{"data": {"postConnection": {"edges": [{"node": {"id": "content/posts/anotherPost.json","title": "Just Another Blog Post","date": "2022-07-15T07:00:00.000Z"}}],"pageInfo": {"hasNextPage": true,"endCursor": "cG9zdCNkYXRlIzE2NTc4Njg0MDAwMDAjY29udGVudC9wb3N0cy9hbm90aGVyUG9zdC5qc29u"}}}}
要在反向方向上分页查询结果,使用 last 和 before 参数,结合 PageInfo 的 startCursor。
这里我们将查询我们的 post 集合,使用 postConnection,将页面大小限制为 1,并从第一项开始:
{postConnection(sort: "date", last: 1, before: "cG9zdCNkYXRlIzE2NTc4Njg0MDAwMDAjY29udGVudC9wb3N0cy9hbm90aGVyUG9zdC5qc29u") {edges {node {idtitledate}}pageInfo {hasPreviousPageendCursor}}}
{"data": {"postConnection": {"edges": [{"node": {"id": "content/posts/voteForPedro.json","title": "Vote For Pedro","date": "2022-06-15T07:00:00.000Z"}}],"pageInfo": {"hasPreviousPage": false,"endCursor": "cG9zdCNkYXRlIzE2NTUyNzY0MDAwMDAjY29udGVudC9wb3N0cy92b3RlRm9yUGVkcm8uanNvbg=="}}}}