util.transform의 변환 도우미 - AWS AppSync

util.transform의 변환 도우미

util.transform에는 데이터 소스에 대해 복잡한 작업을 더 쉽게 수행할 수 있게 해주는 도우미 메서드가 포함되어 있습니다.

util.transform.toDynamoDBFilterExpression(filterObject: DynamoDBFilterObject) : string

입력 문자열을 DynamoDB에 사용할 필터 표현식으로 변환합니다. toDynamoDBFilterExpression기본 제공 모듈 함수와 함께 사용하는 것이 좋습니다.

util.transform.toElasticsearchQueryDSL(object: OpenSearchQueryObject) : string

주어진 입력을 이와 동등한 OpenSearch 쿼리 DSL 표현식으로 변환하여 JSON 문자열로 반환합니다.

입력 예:

util.transform.toElasticsearchQueryDSL({ "upvotes":{ "ne":15, "range":[ 10, 20 ] }, "title":{ "eq":"hihihi", "wildcard":"h*i" } })

출력 예:

{ "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(objFilter, ignoredFields?, rules?): SubscriptionFilter

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

참고

파라미터와 반환 명령문은 다음과 같습니다.

Parameters

  • objFilter: SubscriptionFilterObject

    SubscriptionFilter 표현식 객체로 변환되는 Map 입력 객체입니다.

  • ignoredFields: SubscriptionFilterExcludeKeysType(선택 사항)

    무시될 첫 번째 객체의 필드 이름 List입니다.

  • rules: SubscriptionFilterRuleObject(선택 사항)

    SubscriptionFilter 표현식 객체를 생성할 때 포함되는 엄격한 규칙이 있는 Map 입력 객체입니다. 이러한 엄격한 규칙이 SubscriptionFilter 표현식 객체에 포함되므로 최소한 하나의 규칙이 충족되어 구독 필터를 통과할 수 있습니다.

응답

SubscriptionFilter을 반환합니다.

util.transform.toSubscriptionFilter(Map, List)

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

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

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

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

util.transform.toDynamoDBConditionExpression(conditionObject)

DynamoDB 조건 표현식을 생성합니다.

구독 필터 인수

다음 표에서는 다음 유틸리티의 인수를 정의하는 방법을 설명합니다.

  • Util.transform.toSubscriptionFilter(objFilter, ignoredFields?, rules?): SubscriptionFilter

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" } ] } ] }