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服务器,这是你最好的朋友