如何使用grapqhl为服务器端的嵌套字段定义参数?

时间:2018-08-01 13:01:06

标签: graphql nestjs typeorm

如何为嵌套字段定义参数?假设我想查阅我所有的帖子,但对评论进行限制和排序。谢谢您的帮助。

{
  allPosts {
    title,
    comments(limit: 5) {
      content
    }
  }
}

1 个答案:

答案 0 :(得分:0)

您所指的通常被指定为Pagination,并且是GraphQL's specification所涵盖的内容。

构建查询的不同方式可能允许检索某个对象类型的多条记录(在我们的情况下为注释)。

最简单的选择可以通过使用要横切的对象类型定义GraphQL的查询字符串来实现,这意味着查询看起来像这样:

{
  allPosts {
    title,
    comments {
      content
    }
  }
}

但是使用此实现,您最终将获取所有数据,而不是简单地获取其中的一部分。显然,这种方法可能有很多缺点,具体取决于要获取的数据量,并且只能在特定情况下使用。

实现所需目标的最简单方法是将注释请求为“切片”,这意味着您将请求数据集的特定初始部分。

在这种情况下,您将要求获得最初的5条评论。

{
  allPosts {
    title,
    comments(first: 5) {
      content
    }
  }
}

但是,如果您想对列表的其余部分进行分页怎么办?

{
   allPosts {
     title,
     comments(first: 5, offset:5) {
       content
     }
   }
 }

这样做,您可以要求以下5条评论。

但是在实现分页时建议使用的方法是基于光标的分页,它会翻译为如下内容:

{
  allPosts {
    title,
    comments(first: 5) {
      edges {
        node {
         content
        }
        cursor
      }
    }
  }
}

最困难的部分在于实现resolvers功能(使用Apollo之类的框架要容易一些)。