我使用Gatsby作为我的静态生成器,Contentful作为我的数据源。
我们在Contentful (博客、活动、白皮书)中有多个contentTypes,我想在一个查询中返回这些内容,并按createdAt日期排序。到目前为止,我有以下代码,它按照每个contentType的顺序返回每个contentType,而不是按照整个日期的顺序返回。
有没有办法对整个查询进行排序?
{
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
}
}
}
}发布于 2020-01-14 23:03:42
我不认为GraphQL query能够跨多个字段进行排序,但您可以按组件进行排序
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;发布于 2020-12-31 01:53:45
当然,您可以按多个字段进行排序。只需将字段和排序顺序作为数组传递给您的查询:
query MyQuery {
allContentfulPost(
sort: { fields: [featured, updatedAt], order: [ASC, DESC] }) {
edges {
node {
featured
updatedAt(formatString: "d MM yyyy")
}
}
}
}https://stackoverflow.com/questions/59730879
复制相似问题