【发布时间】:2019-01-09 01:34:35
【问题描述】:
如何为嵌套字段定义参数?假设我想查阅我所有的帖子,但对 cmets 进行限制和排序。谢谢您的帮助。
{
allPosts {
title,
comments(limit: 5) {
content
}
}
}
【问题讨论】:
如何为嵌套字段定义参数?假设我想查阅我所有的帖子,但对 cmets 进行限制和排序。谢谢您的帮助。
{
allPosts {
title,
comments(limit: 5) {
content
}
}
}
【问题讨论】:
您所指的内容通常被指定为Pagination,并且包含在GraphQL's specification 中。
有多种可能的方式来构造查询以允许检索特定对象类型的多条记录(在我们的情况下为 cmets)。
最简单的选择,可以通过将GraphQL的查询字符串定义为您要以复数形式横向的对象类型来实现,这意味着您的查询将如下所示:
{
allPosts {
title,
comments {
content
}
}
}
但是通过这种实现,您最终会获取所有数据,而不是简单地检索其中的一部分。显然,这种方法可能有很多缺点,具体取决于要获取的数据量,并且只能在特定情况下使用。
实现您想要的最简单的方法是将 cmets 请求为“切片”,这意味着您将请求数据集的特定初始部分。
在这种情况下,您将请求最初的 5 个 cmets。
{
allPosts {
title,
comments(first: 5) {
content
}
}
}
但是如果你想对列表的其余部分进行分页呢?
{
allPosts {
title,
comments(first: 5, offset:5) {
content
}
}
}
这样做,您可以要求接下来的 5 个 cmets。
但是在实现分页时推荐使用的方法是基于光标的分页,它会转化为这样的东西:
{
allPosts {
title,
comments(first: 5) {
edges {
node {
content
}
cursor
}
}
}
}
困难的部分在于实现 resolvers 功能(使用 Apollo 等框架稍微容易一些)。
【讨论】: