簡體   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