$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() 확장에 대한 입력으로 사용됩니다. 자세한 내용은 확장을 참조하세요.

첫 번째 인수는 SubscriptionFilter 표현식 객체로 변환되는 Map 입력 객체입니다. 두 번째 인수는 SubscriptionFilter 표현식 객체를 구성하는 동안 첫 번째 Map 입력 객체에서 무시되는 필드 이름의 List입니다.

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

Map 입력 객체를 SubscriptionFilter 표현식 객체로 변환합니다. $util.transform.toSubscriptionFilter 메서드는 $extensions.setSubscriptionFilter() 확장에 대한 입력으로 사용됩니다. 자세한 내용은 확장을 참조하세요.

첫 번째 인수는 SubscriptionFilter 표현식 객체로 변환되는 Map 입력 객체, 두 번째 인수는 첫 번째 Map 입력 객체에서 무시될 필드 이름의 List, 세 번째 인수는 SubscriptionFilter 표현식 객체를 구성하는 동안 포함되는 엄격한 규칙의 Map 입력 객체입니다. 이러한 엄격한 규칙이 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 . . . }

필드에 두 개 이상의 조건이 있는 경우 이러한 모든 조건은 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은 엄격한 규칙 목록을 나타내며, 이러한 규칙 목록은 필터를 통과하기 위해 이러한 조건 중 하나 이상이 충족되도록 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" } ] } ] }