【问题标题】:How to control sort direction in a list query in AWS-Amplify with GraphQL如何使用 GraphQL 在 AWS-Amplify 中控制列表查询中的排序方向
【发布时间】:2021-01-25 17:57:58
【问题描述】:

我看到了几篇有用的帖子,介绍了如何在 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 条记录。默认情况下,此数据将按升序顺序返回,这意味着您将首先获得最旧记录。

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

【问题讨论】:

    标签: javascript graphql aws-amplify


    【解决方案1】:

    (不能评论声誉低于 50 大声笑,所以需要做出一个完整的其他答案)

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

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

    查询会根据项目的DoB对项目进行排序

    【讨论】:

      【解决方案2】:

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

      您需要一种按降序顺序对表记录进行排序的方法。如果您查看 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,而不是$sortDirection,或ModelSortDirection。)

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

      【讨论】:

        猜你喜欢
        • 2020-01-17
        • 2020-08-19
        • 1970-01-01
        • 2019-09-07
        • 2020-07-06
        • 2021-01-25
        • 2020-01-31
        • 2019-11-30
        • 2021-02-21
        相关资源
        最近更新 更多