Query - AWS AppSync

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Query

Query リクエストオブジェクトを使用すると、 AWS AppSync DynamoDB リゾルバーに DynamoDB へのQueryリクエストを行うように指示し、以下を指定できます。

  • キー式

  • 使用するインデックス

  • 任意の追加フィルタ

  • 返す項目の数

  • 整合性のある読み込みを使用するかどうか

  • クエリの方向 (前方または後方)

  • ページ分割トークン

Query リクエストオブジェクトのノードの構造は次のとおりです。

type DynamoDBQueryRequest = { operation: 'Query'; query: { expression: string; expressionNames?: { [key: string]: string }; expressionValues?: { [key: string]: any }; }; index?: string; nextToken?: string; limit?: number; scanIndexForward?: boolean; consistentRead?: boolean; select?: 'ALL_ATTRIBUTES' | 'ALL_PROJECTED_ATTRIBUTES' | 'SPECIFIC_ATTRIBUTES'; filter?: { expression: string; expressionNames?: { [key: string]: string }; expressionValues?: { [key: string]: any }; }; projection?: { expression: string; expressionNames?: { [key: string]: string }; }; };

各フィールドの定義は以下のようになります。

Query フィールド

operation

実行する DynamoDB の処理。Query DynamoDB の処理を実行するには、これを Query に設定する必要があります。この値は必須です。

query

query セクションには、DynamoDB から取得する項目を指示するキー条件式を指定することができます。キー条件式の記述方法の詳細については、DynamoDB KeyConditions ドキュメント を参照してください。このセクションの指定は必須です。

expression

クエリ式です。このフィールドの指定は必須です。

expressionNames

式の属性のプレースホルダーを示します。キー - 値のペアの形式になります。キーは expression で使用される名前のプレースホルダーに対応し、値は DynamoDB の項目の属性名と一致する文字列でなければなりません。このフィールドはオプションであり、expression で使用される式の属性名のプレースホルダーのみを入力します。

expressionValues

式の属性のプレースホルダーを示します。キー - 値のペアの形式になります。キーは expression で使用される値のプレースホルダーに対応し、値は型付き値でなければなりません。「型付き値」を指定する方法の詳細については、「型システム (リクエストマッピング)」を参照してください。この値は必須です。このフィールドはオプションであり、expression で使用される式の属性値のプレースホルダーのみを入力します。

filter

DynamoDB からの結果が返される前に、その結果をフィルタリングするために使用する追加フィルタです。フィルタの詳細については、「フィルタ」を参照してください。このフィールドはオプションです。

index

クエリを実行するインデックスの名前です。DynamoDB クエリの処理により、ハッシュキーのプライマリキーインデックスに加えて、ローカルセカンダリインデックスとグローバルセカンダリインデックスをスキャンできます。指定されると、DynamoDB が指定されたインデックスにクエリを実行します。省略すると、プライマリキーインデックスに対してクエリが実行されます。

nextToken

前のクエリを継続するためのページ分割トークンです。これは前のクエリから取得されます。このフィールドはオプションです。

limit

評価する項目の最大数 (一致する項目の数であるとは限りません)。このフィールドはオプションです。

scanIndexForward

クエリを前方と後方のどちらに実行するかを示すブール値です。このフィールドはオプションであり、デフォルトは true です。

consistentRead

DynamoDB にクエリを実行する際に整合性のある読み込みを使用するかどうかを示すブール値です。このフィールドはオプションであり、デフォルトは false です。

select

デフォルトでは、 AWS AppSync DynamoDB リゾルバーはインデックスに射影された属性のみを返します。より多くの属性が必要な場合に、このフィールドを設定できます。このフィールドはオプションです。サポートされている値には以下があります。

ALL_ATTRIBUTES

指定されたテーブルまたはインデックスのすべての項目の属性を返します。ローカルセカンダリインデックスに対してクエリを実行する場合、DynamoDB は、親のテーブルからインデックスの項目に一致したすべての項目をフェッチします。インデックスがすべての項目の属性を射影するように設定されている場合、すべてのデータはローカルセカンダリインデックスから取得されるため、フェッチは必要ありません。

ALL_PROJECTED_ATTRIBUTES

インデックスにクエリを実行する場合のみ使用できます。インデックスに投射されたすべての属性を取得します。インデックスがすべての属性を投射するように設定されている場合、この返り値は ALL_ATTRIBUTES を指定した場合と同等になります。

SPECIFIC_ATTRIBUTES

projectionexpression にリストされている属性のみを返します。この戻り値は、Select の値を指定せずに projectionexpression を指定するのと同じです。

projection

DynamoDB オペレーションから返される属性を指定するために使用されるプロジェクション。プロジェクションの詳細については、「プロジェクション」を参照してください。このフィールドはオプションです。

DynamoDB の結果は、GraphQL とJSONプリミティブタイプに自動的に変換され、コンテキスト結果 () で使用できますcontext.result

DynamoDB の型変換の詳細については、「型システム (リクエストマッピング)」を参照してください。

JavaScript リゾルバーの詳細については、JavaScript 「リゾルバーの概要」を参照してください。

結果は以下の構造を持ちます。

{ items = [ ... ], nextToken = "a pagination token", scannedCount = 10 }

各フィールドの定義は以下のようになります。

items

DynamoDB クエリで返された項目を含むリストです。

nextToken

さらに結果がある場合、nextToken には別のリクエストで使用できるページ分割トークンが含まれています。は、DynamoDB から返されるページ分割トークンを AWS AppSync 暗号化して難読化します。これにより、テーブルデータが誤って呼び出し元に漏えいされるのを防ぎます。また、これらのページ分割トークンは、異なる関数やリゾルバー間では使用できないことにも注意してください。

scannedCount

フィルタ式 (ある場合) が適用される前に、クエリの条件式に一致した項目の数です。

次の例は、GraphQL クエリgetPosts(owner: ID!) の関数リクエストハンドラーです。

この例では、テーブルのグローバルセカンダリインデックスにクエリが実行され、指定した ID が所有するすべての投稿が返されます。

import { util } from '@aws-appsync/utils'; export function request(ctx) { const { owner } = ctx.args; return { operation: 'Query', query: { expression: 'ownerId = :ownerId', expressionValues: util.dynamodb.toMapValues({ ':ownerId': owner }), }, index: 'owner-index', }; }

DynamoDB の詳細についてはQueryAPI、DynamoDB APIドキュメント を参照してください。