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

时间:2020-10-11 04:28:15

标签: javascript graphql aws-amplify

我已经看了几篇关于如何在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 }));

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

但是,我需要的是最先包含最新记录的响应。我必须在架构或查询中添加些什么,以便设置排序顺序?

1 个答案:

答案 0 :(得分:0)

(扰流板警报:如果有人在此方面寻求帮助,我在这里回答自己的问题。)

您将需要一种以降序顺序对表的记录进行排序的方法。如果您查看由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'),则可以在进行如下查询时将in作为变量参数之一传递所以:

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

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

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