繁体   English   中英

如何使用 GraphQL 在 AWS-Amplify 中控制列表查询中的排序方向

[英]How to control sort direction in a list query in AWS-Amplify with GraphQL

我看过几篇关于如何在 AWS-Amplify 的 GrahphQL API 包中创建模式的有用帖子,这些模式将返回一个排序的响应。 简而言之,如果您的schema.graphql文件中有以下内容

type Record @model
@key(name: "byDateCreated", fields: ["status", "createdAt"], queryField: "RecordsByDateCreated") {
    id: ID!
    status: RecordStatus!
    description: String!
    createdAt: String
}

它将创建一个名为recordsByDateCreated的自定义查询。 如下使用它(这里是js,伙计们):

await API.graphql(graphqlOperation(recordsByDateCreated, { status: 'unused', limit: 10 }));

将返回表中按其createdAt值排序的前 10 条记录。 默认情况下,此数据将按升序返回,这意味着您将首先获得最旧的记录。

但是,我需要的是首先具有最新记录的响应。 我必须在架构或查询中添加什么才能设置排序顺序?

(剧透警告:我在这里回答我自己的问题,以防其他人寻求帮助。)

您需要一种方法来按降序对表的记录进行排序。 如果您查看 AWS-Amplify 生成的文件,您会看到您创建的新查询接受一系列参数:

export const recordsByDateCreated = /* GraphQL */ `
  query RecordsByDateCreated(
    $status: RecordStatus
    $createdAt: ModelStringKeyConditionInput
    $sortDirection: ModelSortDirection
    $filter: ModelRecordFilterInput
    $limit: Int
    $nextToken: String
  ) {
    RecordsByDateCreated(
      status: $status
      createdAt: $createdAt
      sortDirection: $sortDirection
      filter: $filter
      limit: $limit
      nextToken: $nextToken
    ) {
      items {
        id
        description
        status
        createdAt
        updatedAt
      }
      nextToken
    }
  }
`

事实证明,如果您知道ModelSortDirection的可能值(它们是“ASC”和“DESC”),则可以在进行查询时将一个作为变量参数之一传入,如下所示:

await API.graphql(graphqlOperation(recordsByDateCreated, { status: 'unused', limit: 10, sortDirection: 'DESC' }));

(请注意,您传递的变量的键是sortDirection而不是$sortDirectionModelSortDirection 。)

我在 AWS-Amplify 的文档中找不到这个,并依赖于我发现的其他帖子。 如果您找到了与此相关的任何文档,那么您可以在评论中添加一个链接。

(不能以低于 50 的声望发表评论,所以需要做一个完整的其他答案)

正如您提到的,将sortDirection添加为变量参数之一允许您选择方向,但如果您希望按默认属性以外的特定属性对项目进行排序,则必须在 graphql 中做出该选择模式模型定义。 因此,对于模型User您将在第二个关键字段中选择属性

type User
@model
@key(fields: ["id", "DoB"]) {
    id: ID!
    name: String!
    DoB: String!
    createdAt: String!
}

并且查询将按其DoB对项目进行排序

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM