首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Gatsby中对多个查询上的GraphQL查询排序

问在Gatsby中对多个查询上的GraphQL查询排序
EN

Stack Overflow用户
提问于 2020-01-14 17:30:16
回答 2查看 1.6K关注 0票数 2

我使用Gatsby作为我的静态生成器,Contentful作为我的数据源。

我们在Contentful (博客、活动、白皮书)中有多个contentTypes,我想在一个查询中返回这些内容,并按createdAt日期排序。到目前为止,我有以下代码,它按照每个contentType的顺序返回每个contentType,而不是按照整个日期的顺序返回。

有没有办法对整个查询进行排序?

代码语言:javascript
复制
{
    whitepapers: allContentfulWhitepaper(sort: { order: DESC, fields: createdAt }) {
      edges {
        node {
          id
          slug
          title
        }
      }
    }
    blogs: allContentfulBlogPost(sort: { order: DESC, fields: createdAt }) {
      edges {
        node {
          id
          slug
          title
        }
      }
    }
    events: allContentfulEventPage(sort: { order: DESC, fields: createdAt }) {
      edges {
        node {
          id
          slug
          title
        }
      }
    }
  }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-01-14 23:03:42

我不认为GraphQL query能够跨多个字段进行排序,但您可以按组件进行排序

代码语言:javascript
复制
import React from 'react';
import { graphql } from 'gatsby';

const IndexPage = ({ data }) => {
  const { whitepapers, blogs, events } = data;
  const allDataInDesc = [
    ...whitepagers.edges.map(e => e.node),
    ...blogs.edges.map(e => e.node),
    ...events.edges.map(e => e.node),
  ].sort((a, b) => { return new Date(a.createdAt) > new Date(b.createdAt) ? -1 : 1; });

  return <>...</>
}

export const query = graphql`
  {
    whitepapers: allContentfulWhitepaper(sort: { order: DESC, fields: createdAt }) {
      edges {
        node {
          id
          slug
          title
          createdAt
        }
      }
    }
    blogs: allContentfulBlogPost(sort: { order: DESC, fields: createdAt }) {
      edges {
        node {
          id
          slug
          title
          createdAt
        }
      }
    }
    events: allContentfulEventPage(sort: { order: DESC, fields: createdAt }) {
      edges {
        node {
          id
          slug
          title
          createdAt
        }
      }
    }
  }
`;

export default IndexPage;
票数 3
EN

Stack Overflow用户

发布于 2020-12-31 01:53:45

当然,您可以按多个字段进行排序。只需将字段和排序顺序作为数组传递给您的查询:

代码语言:javascript
复制
query MyQuery {
    allContentfulPost(
        sort: { fields: [featured, updatedAt], order: [ASC, DESC] }) {
        edges {
            node {
               featured
               updatedAt(formatString: "d MM yyyy")
            }
        }
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59730879

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档