graphql orderBy 查询出现问题

Kie*_*era 5 apollo graphql-js apollo-server

我正在使用 apollo graphql 服务器。我有一个查询,无序运行良好。

query feedQuery {
  allPostsFromAllBlogs
  {
    id
    blogId
    title
    text
    likes
    createdAt
  }
}
Run Code Online (Sandbox Code Playgroud)

我想对结果进行排序(类型为 [Post])。这是我用来执行此操作的查询:

query feedQuery {
  allPostsFromAllBlogs( orderBy: {field: createdAt, direction:DESC}) 
  {
    id
    blogId
    title
    text
    likes
    createdAt
  }
}
Run Code Online (Sandbox Code Playgroud)

在graphiql中产生这个输出:

{
  "errors": [
{
  "message": "Unknown argument \"orderBy\" on field \"allPostsFromAllBlogs\" of type \"Query\".",
  "locations": [
    {
      "line": 2,
      "column": 25
    }
    ]
   }
 ]
}
Run Code Online (Sandbox Code Playgroud)

这是架构:

scalar DateTime
type Query {
  blogInfo(id: String): Blog
  post(id: String): Post
  topPost(blogId: String): Post
  allPosts(blogId: String): [Post]
  allPostsFromAllBlogs: [Post]
  topPostFromAllBlogs: [BlogWithPost]
  comments(postId: String): Comments
  allBlogs: [Blog]
}
type Mutation {
  createPost(title: String,
             content: String,
             type: String,
             blogId: String,
             avatar: String): Post
}
type Blog {
  id: String
  title: String
  description: String
  authorName: String
  avatar: String
}
type Post {
  id: String
  blogId: String
  title: String
  content: String
  likes: Int
  avatar: String
  createdAt: DateTime
  type: String
}
type BlogWithPost {
  id: String
  title: String
  description: String
  authorName: String
  avatar: String
  post: Post
}
type Comment {
  commenterId: String
  text: String
}
type Comments {
  postId: String
  comments: [Comment]
}
Run Code Online (Sandbox Code Playgroud)

我不确定诊断问题还需要哪些其他信息,但我认为这是一个查询语法错误。

为什么不识别orderBy?是否有不同或更好的方法来对结果进行排序?

Mar*_*iel 4

问题是因为allPostsFromAllBlogs没有任何输入类型(即过滤器)。从架构中可以看出:

type Query {
  ...
  allPosts(blogId: String): [Post]
  allPostsFromAllBlogs: [Post]
  ...
}
Run Code Online (Sandbox Code Playgroud)

该字段allPosts具有输入类型blogId: String,但该字段allPostsFromAllBlogs未实现任何输入类型。

您必须将该字段更改allPostsFromAllBlogs为以下内容:

type Query {
  ...
  allPosts(blogId: String): [Post]
  allPostsFromAllBlogs(orderBy: yourInputTypeDefinition): [Post]
  ...
}
Run Code Online (Sandbox Code Playgroud)

并且您必须更改该字段的解析器。