Filter Gatsby.js:按嵌套对象属性筛选GraphQL查询

Filter Gatsby.js:按嵌套对象属性筛选GraphQL查询,filter,graphql,graphql-js,contentful,gatsby,Filter,Graphql,Graphql Js,Contentful,Gatsby,我在一个新闻网站上工作,该网站将有文章,每个文章都有一个或多个作者。如果你点击一个作者的名字,它会带你进入一个页面,显示他们的信息和他们发表的文章列表 因此,每篇文章都有一个authors属性,这又是一个author对象的数组,这些对象具有以下属性:全名、slug(全名的小写版本,其中空格由破折号代替)等 在定义查询时,是否可以按特定作者的slug筛选文章 query authorQuery($slug: String!) { allContentfulArticle(filter: { /

我在一个新闻网站上工作,该网站将有文章,每个文章都有一个或多个作者。如果你点击一个作者的名字,它会带你进入一个页面,显示他们的信息和他们发表的文章列表

因此,每篇文章都有一个
authors
属性,这又是一个
author
对象的数组,这些对象具有以下属性:全名、slug(全名的小写版本,其中空格由破折号代替)等

在定义查询时,是否可以按特定作者的slug筛选文章

query authorQuery($slug: String!) {
  allContentfulArticle(filter: { //not sure what to do here }) {
    edges {
      node {
        title
        slug
        authors {
          name
          slug
        }
      }
    }
  }
}
我的另一个选择是加载所有文章,然后在组件中设置一个过滤器,如下所示:

const articles = data.allContentfulArticle.edges.filter(({ node }) => {
  return node.authors.some((author) => author.slug === data.contentfulAuthor.slug);
});

这不会是世界末日,但是它违背了GraphQL原则,即只加载您需要的数据。

如果我理解正确,您希望在这里实现什么,您希望按作者对文章进行分组。 如果查询并将筛选器应用于
allContentfulAuthor
并请求
文章
字段,如下所示:

{
  allContentfulAuthor(filter: {slug: {eq: "myslug"}}) {
    edges {
      node {
        name
        article {
          title
          slug
        }
      }
    }
  }
}

请注意,
文章
名称是文章的contentTypeId

若作者并没有文章字段,这会起作用吗?谢谢Khaled!我没有意识到author对象会自动包含一个article字段,因为我将关系定义为包含authors的article,反之亦然。是什么导致了这种神奇的满足感呢?很酷。为了回答你的问题@LukeFlournoy,答案似乎是肯定的:)这是作者对这篇文章的引用,与满足无关,这是更多的GraphQl magicThanks,每天都越来越喜欢GraphQl。一个与嵌套相关的快速后续问题是:是否也可以按字段对文章进行排序?这意味着在上面的例子中,你可以把文章(排序:{fields:[date],order:DESC}{title slug})放到本地主机上测试,在开发模式下,你可以在8000/uuuuu graphql,Gatsbyjs为你生成一个grapgiql服务器,这是你最好的朋友