Gatsby和GraphQL-如何在查询中筛选数组

Gatsby和GraphQL-如何在查询中筛选数组,graphql,contentful,gatsby,Graphql,Contentful,Gatsby,我开始使用Gatsby和GraphQL返回一个查询,其中列出了属于特定类别的所有库。在本例中,该类别称为“生活方式”。这一切都很成功,我得到了一个包含该类别中所有图库的数组。我还需要根据名为“日期”的子字段对该数组进行排序。这可以通过GraphQL查询本身实现吗?我尝试将(sort:{fields:[date],order:DESC})添加到gallery字段,但没有成功 有没有关于如何实现这一点的想法,或者这是否是GraphQL能够让我达到我所需要的程度的最接近的想法 提前感谢您的帮助。我仍在

我开始使用Gatsby和GraphQL返回一个查询,其中列出了属于特定类别的所有库。在本例中,该类别称为“生活方式”。这一切都很成功,我得到了一个包含该类别中所有图库的数组。我还需要根据名为“日期”的子字段对该数组进行排序。这可以通过GraphQL查询本身实现吗?我尝试将
(sort:{fields:[date],order:DESC})
添加到gallery字段,但没有成功

有没有关于如何实现这一点的想法,或者这是否是GraphQL能够让我达到我所需要的程度的最接近的想法

提前感谢您的帮助。我仍在努力让我的脑袋绕着GraphQL转

瑞安


能否提供有关您的内容模型的更多详细信息

  • 如果你在contentful中使用一个“Reference”字段,很遗憾,据我所知,到目前为止,这个插件还不可能
  • 如果使用“短文本,列表”字段,如默认示例中的标记
在默认示例中,您可以执行以下查询:

    {
          allContentfulPost(filter:{tags:{eq:"fantasy"}}, sort:{fields:[date], order:DESC}) {
            edges {
              node {
                title {
                  childMarkdownRemark {
                    html
              }
            }
            slug
            date
          }
        }
      }
    }
它将为您提供以下结果:

    {
      "data": {
        "allContentfulPost": {
          "edges": [
            {
              "node": {
                "title": {
                  "childMarkdownRemark": {
                    "html": "<p>Disney Movie</p>"
                  }
                },
                "slug": "down-the-rabbit-hole",
                "date": "2017-11-26"
              }
            },
            {
              "node": {
                "title": {
                  "childMarkdownRemark": {
                    "html": "<p>Old book</p>"
                  }
                },
                "slug": "down-the-rabbit-hole-2",
                "date": "1865-11-26"
              }
            }
          ]
        }
      }
    }
{
“数据”:{
“allContentfulPost”:{
“边缘”:[
{
“节点”:{
“标题”:{
“ChildMarkdown备注”:{
“html”:“迪士尼电影

” } }, “鼻涕虫”:“兔子洞下”, “日期”:“2017-11-26” } }, { “节点”:{ “标题”:{ “ChildMarkdown备注”:{ “html”:“旧书” } }, “slug”:“地下兔子洞-2”, “日期”:“1865-11-26” } } ] } } }
当我试图从Contentful中使用的分类标签中对帖子进行排序时,我遇到了同样的问题。正如@chmac所说,您可以使用Javascript对GraphQL中的数据进行排序

我不得不寻找一个好的例子,但我最终在《盖茨比入门》中找到了一个:

Github:

实例:

您可以在源文件中看到,他们使用
moment
()和
lodash
将数据排序为一个名为
posts
的新常量。在我的个人示例中,我必须调整常量,如下所示:

const courses = orderBy(
            this.props.data.contentfulCategory.course,
            // eslint-disable-next-line
            [object => new moment(object.createdAt)],
            ['desc']
          )
然后我在组件返回中使用了一个映射函数,如下所示:

{/* Courses */}
{courses.map(course => (
    <div className="hero__profile" key={course.id}>
        <h2>{course.title}</h2>
    </div>
))}
{/*课程*/}
{courses.map(courses=>(
{课程名称}
))}

我希望这有帮助

好的。是的,我当前的内容模型有两种类型:图库和类别。我使用Gallery内容类型中的引用字段将其与给定类别关联。因为它在这个项目中还处于早期阶段,我可以根据您的示例切换到使用常规文本字段,并给出一个快照。似乎引用字段应该是“正确”的方法,但如果它是
gatsby source contentful
插件的一个限制,就可以了。只要我按照正确的顺序得到所需的数据,我就会很高兴。意识到你可能已经解决了这个问题,但是你也可以考虑从JavaScript中从GealQL获取数据之后进行排序。它并不总是正确的方法,但在某些情况下可能有用。Lodash/下划线有
\uu.sortBy()
函数,使其非常简单。