util.transform の変換ヘルパー - AWS AppSync

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

util.transform の変換ヘルパー

注記

現在、主に APPSYNC_JS ランタイムとそのドキュメントをサポートしています。こちらにある APPSYNC_JS ランタイムとそのガイドの使用をご検討ください。

$util.transform には、Amazon DynamoDB フィルター処理などの、データソースに対する複雑なオペレーションの実行を容易にするヘルパーメソッドが含まれています。

変換ヘルパー

$util.transform.toDynamoDBFilterExpression(Map) : Map

DynamoDB で使用するために、入力文字列をフィルター式に変換します。

Input: $util.transform.toDynamoDBFilterExpression({ "title":{ "contains":"Hello World" } }) Output: { "expression" : "contains(#title, :title_contains)" "expressionNames" : { "#title" : "title", }, "expressionValues" : { ":title_contains" : { "S" : "Hello World" } }, }
$util.transform.toElasticsearchQueryDSL(Map) : Map

指定された入力を同等の OpenSearch Query DSL 式に変換し、JSON 文字列として返します。

Input: $util.transform.toElasticsearchQueryDSL({ "upvotes":{ "ne":15, "range":[ 10, 20 ] }, "title":{ "eq":"hihihi", "wildcard":"h*i" } }) Output: { "bool":{ "must":[ { "bool":{ "must":[ { "bool":{ "must_not":{ "term":{ "upvotes":15 } } } }, { "range":{ "upvotes":{ "gte":10, "lte":20 } } } ] } }, { "bool":{ "must":[ { "term":{ "title":"hihihi" } }, { "wildcard":{ "title":"h*i" } } ] } } ] } }

デフォルトの演算子は AND であると仮定されます。

変換ヘルパーサブスクリプションフィルター

$util.transform.toSubscriptionFilter(Map) : Map

Map 入力オブジェクトを SubscriptionFilter 式オブジェクトに変換します。$util.transform.toSubscriptionFilter メソッドは $extensions.setSubscriptionFilter() 拡張子への入力として使用されます。詳細については、「拡張子」を参照してください。

$util.transform.toSubscriptionFilter(Map, List) : Map

Map 入力オブジェクトを SubscriptionFilter 式オブジェクトに変換します。$util.transform.toSubscriptionFilter メソッドは $extensions.setSubscriptionFilter() 拡張子への入力として使用されます。詳細については、「拡張子の使用」を参照してください。

1 番目の引数は、SubscriptionFilter 式オブジェクトに変換される Map 入力オブジェクトです。2 番目の引数は、SubscriptionFilter 式オブジェクトを作成する際に 1 番目の Map 入力オブジェクトでは無視されるフィールド名の List です。

$util.transform.toSubscriptionFilter(Map, List, Map) : Map

Map 入力オブジェクトを SubscriptionFilter 式オブジェクトに変換します。$util.transform.toSubscriptionFilter メソッドは $extensions.setSubscriptionFilter() 拡張子への入力として使用されます。詳細については、「拡張子」を参照してください。

1 番目の引数は SubscriptionFilter 式オブジェクトに変換される Map 入力オブジェクト、2 番目の引数は最初の Map 入力オブジェクトでは無視されるフィールド名のList、3 番目の引数は SubscriptionFilter 式オブジェクトの作成時に含まれる厳密な規則の Map 入力オブジェクトです。これらの厳密なルールは、少なくとも 1 つのルールが満たされてサブスクリプションフィルターを通過するように SubscriptionFilter 式オブジェクトに含まれています。

サブスクリプションフィルター引数

以下の表では、以下のユーティリティの引数の定義方法について説明しています。

  • $util.transform.toSubscriptionFilter(Map) : Map

  • $util.transform.toSubscriptionFilter(Map, List) : Map

  • $util.transform.toSubscriptionFilter(Map, List, Map) : Map

Argument 1: Map

引数 1 は、以下のキー値を持つ Map オブジェクトです。

  • フィールド名

  • "and"

  • "or"

フィールド名をキーとする場合、これらのフィールドのエントリの条件は "operator" : "value" という形式になります。

次の例では、Map にエントリを追加する方法を示します。

"field_name" : { "operator1" : value } ## We can have multiple conditions for the same field_name: "field_name" : { "operator1" : value "operator2" : value . . . }

フィールドに 2 つ以上の条件が設定されている場合、これらの条件はすべて OR 演算を使用するものとみなされます。

入力 Map には「and」と「or」 をキーとして使用することもできます。つまり、その中のすべてのエントリは、キーに応じて AND または OR ロジックを使用して結合する必要があります。キー値「and」と「or」には条件の配列が必要です。

"and" : [ { "field_name1" : { "operator1" : value } }, { "field_name2" : { "operator1" : value } }, . . ].

「and」と「or」はネストできることに注意してください。つまり、「and/or」を別の「and/or」ブロック内にネストしてもかまいません。ただし、これは単純なフィールドでは機能しません。

"and" : [ { "field_name1" : { "operator" : value } }, { "or" : [ { "field_name2" : { "operator" : value } }, { "field_name3" : { "operator" : value } } ].

次の例は、$util.transform.toSubscriptionFilter(Map) : Mapを使用して引数 1 を入力したものです。

入力

引数 1: マップ:

{ "percentageUp": { "lte": 50, "gte": 20 }, "and": [ { "title": { "ne": "Book1" } }, { "downvotes": { "gt": 2000 } } ], "or": [ { "author": { "eq": "Admin" } }, { "isPublished": { "eq": false } } ] }

出力

結果は Map オブジェクトです。

{ "filterGroup": [ { "filters": [ { "fieldName": "percentageUp", "operator": "lte", "value": 50 }, { "fieldName": "title", "operator": "ne", "value": "Book1" }, { "fieldName": "downvotes", "operator": "gt", "value": 2000 }, { "fieldName": "author", "operator": "eq", "value": "Admin" } ] }, { "filters": [ { "fieldName": "percentageUp", "operator": "lte", "value": 50 }, { "fieldName": "title", "operator": "ne", "value": "Book1" }, { "fieldName": "downvotes", "operator": "gt", "value": 2000 }, { "fieldName": "isPublished", "operator": "eq", "value": false } ] }, { "filters": [ { "fieldName": "percentageUp", "operator": "gte", "value": 20 }, { "fieldName": "title", "operator": "ne", "value": "Book1" }, { "fieldName": "downvotes", "operator": "gt", "value": 2000 }, { "fieldName": "author", "operator": "eq", "value": "Admin" } ] }, { "filters": [ { "fieldName": "percentageUp", "operator": "gte", "value": 20 }, { "fieldName": "title", "operator": "ne", "value": "Book1" }, { "fieldName": "downvotes", "operator": "gt", "value": 2000 }, { "fieldName": "isPublished", "operator": "eq", "value": false } ] } ] }
Argument 2: List

引数 2 には、SubscriptionFilter式オブジェクトを作成するときに入力 Map (引数 1) で考慮してはいけないフィールド名の List が含まれています。List セクションは空になることもあります。

次の例は、$util.transform.toSubscriptionFilter(Map, List) : Map を使用した引数 1 と引数 2 の入力を示しています。

入力

引数 1: マップ:

{ "percentageUp": { "lte": 50, "gte": 20 }, "and": [ { "title": { "ne": "Book1" } }, { "downvotes": { "gt": 20 } } ], "or": [ { "author": { "eq": "Admin" } }, { "isPublished": { "eq": false } } ] }

引数 2: リスト:

["percentageUp", "author"]

出力

結果は Map オブジェクトです。

{ "filterGroup": [ { "filters": [ { "fieldName": "title", "operator": "ne", "value": "Book1" }, { "fieldName": "downvotes", "operator": "gt", "value": 20 }, { "fieldName": "isPublished", "operator": "eq", "value": false } ] } ] }
Argument 3: Map

引数 3 は、フィールド名をキー値とする Map オブジェクトです (「and」や「or」は使用できません)。フィールド名がキーの場合、これらのフィールドの条件は "operator" : "value" という形式のエントリになります。引数 1 とは異なり、引数 3 では同じキーに複数の条件を設定できません。さらに、引数 3 には「and」や「or」句がないため、ネストも必要ありません。

引数 3 は厳密な規則のリストを表し、これらの条件の少なくとも 1 つが満たされてフィルタを通過するように SubscriptionFilter 式オブジェクトに追加されます。

{ "fieldname1": { "operator": value }, "fieldname2": { "operator": value } } . . .

次の例は、$util.transform.toSubscriptionFilter(Map, List, Map) : Map を使用した引数 1引数 2引数 3 の入力を示しています。

入力

引数 1: マップ:

{ "percentageUp": { "lte": 50, "gte": 20 }, "and": [ { "title": { "ne": "Book1" } }, { "downvotes": { "lt": 20 } } ], "or": [ { "author": { "eq": "Admin" } }, { "isPublished": { "eq": false } } ] }

引数 2: リスト:

["percentageUp", "author"]

引数 3: マップ:

{ "upvotes": { "gte": 250 }, "author": { "eq": "Person1" } }

出力

結果は Map オブジェクトです。

{ "filterGroup": [ { "filters": [ { "fieldName": "title", "operator": "ne", "value": "Book1" }, { "fieldName": "downvotes", "operator": "gt", "value": 20 }, { "fieldName": "isPublished", "operator": "eq", "value": false }, { "fieldName": "upvotes", "operator": "gte", "value": 250 } ] }, { "filters": [ { "fieldName": "title", "operator": "ne", "value": "Book1" }, { "fieldName": "downvotes", "operator": "gt", "value": 20 }, { "fieldName": "isPublished", "operator": "eq", "value": false }, { "fieldName": "author", "operator": "eq", "value": "Person1" } ] } ] }