Gatsby.js:按嵌套对象过滤 GraphQL 查询 属性
Gatsby.js: Filter GraphQL query by nested object property
我在一个新闻网站上工作,该网站将有文章,每篇文章都有一个或多个作者。如果您单击作者的姓名,它将带您到一个页面,其中显示他们的信息和他们所贡献的文章列表。
所以每篇文章都有一个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
,则可以实现这一点
并请求 article
字段,如下所示:
{
allContentfulAuthor(filter: {slug: {eq: "myslug"}}) {
edges {
node {
name
article {
title
slug
}
}
}
}
}
请注意,article
名称是您文章的 contentTypeId。
我在一个新闻网站上工作,该网站将有文章,每篇文章都有一个或多个作者。如果您单击作者的姓名,它将带您到一个页面,其中显示他们的信息和他们所贡献的文章列表。
所以每篇文章都有一个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
,则可以实现这一点
并请求 article
字段,如下所示:
{
allContentfulAuthor(filter: {slug: {eq: "myslug"}}) {
edges {
node {
name
article {
title
slug
}
}
}
}
}
请注意,article
名称是您文章的 contentTypeId。