Name:
interface
Value:
Amplify has re-imagined the way frontend developers build fullstack applications. Develop and deploy without the hassle.

Page updated Oct 26, 2024

Maintenance ModeYou are viewing Amplify Gen 1 documentation. Amplify Gen 1 has entered maintenance mode and will reach end of life on May 1, 2027. New project should use Amplify Gen 2. For existing Gen 1 projects, a migration guide and tooling are available to help you upgrade. Switch to the latest Gen 2 docs →

日付でソートするGraphQLクエリ

このガイドでは、GraphQL APIにソート機能を実装する方法について学習します。この例では、@index GraphQL Transformer ディレクティブを使用して DynamoDB Global Secondary Index を活用し、日付で昇順または降順にソート結果を実装します。

概要

まず、Todoアプリの基本的なGraphQLスキーマから始めましょう:

type Todo @model {
id: ID!
title: String!
}

@model ディレクティブで API が作成されると、以下のクエリが自動的に生成されます:

type Query {
getTodo(id: ID!): Todo
listTodos(
filter: ModelTodoFilterInput
limit: Int
nextToken: String
): ModelTodoConnection
}

次に、ModelTodoConnection タイプを確認して、listTodos クエリが実行されたときに返されるデータについて理解しましょう:

type ModelTodoConnection {
items: [Todo]
nextToken: String
}

デフォルトでは、listTodos クエリは items 配列を順序なしで返します。多くの場合、これらのアイテムをタイトルで、作成日で、またはその他の方法でソートする必要があります。

これを実現するには、@index ディレクティブを使用できます。このディレクティブにより、API内の任意のフィールドにカスタム sortKey を設定できます。

実装

この例では、createdAt フィールドでソートを有効にします。デフォルトでは、何も渡されない場合、Amplify はこの createdAt フィールドにタイムスタンプを自動的に入力します。

これを有効にするには、スキーマを以下のように更新します:

type Todo @model {
id: ID!
title: String!
type: String!
@index(
name: "todosByDate"
queryField: "todosByDate"
sortKeyFields: ["createdAt"]
)
createdAt: String!
}

Todo を作成する際は、これが正しく機能するために type フィールドに値を入力する必要があります。

次に、type フィールドに値を入力して、いくつかの Todo を作成します:

mutation createTodo {
createTodo(input: { title: "Todo 1", type: "Todo" }) {
id
title
}
}

これで、新しい todosByDate クエリを使用して、日付で昇順または降順に Todo をクエリできます:

query todosByDate {
todosByDate(type: "Todo", sortDirection: ASC) {
items {
id
title
createdAt
}
}
}
query todosByDateDescending {
todosByDate(type: "Todo", sortDirection: DESC) {
items {
id
title
createdAt
}
}
}

@index ディレクティブの詳細については、こちらのドキュメントを参照してください。