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()延伸模組的輸入。如需詳細資訊,請參閱延伸模組

注意

參數和傳回陳述式列示如下:

參數

  • objFilter: SubscriptionFilterObject

    轉換為SubscriptionFilter表達式物件的Map輸入物件。

  • ignoredFieldsSubscriptionFilterExcludeKeysType (選用)

    將忽略的第一個物件中的List欄位名稱。

  • rulesSubscriptionFilterRuleObject (選用)

    當您建構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物件:

  • 欄位名稱

  • "和"

  • "或"

對於欄位名稱作為索引鍵,這些欄位項目的條件是以 的形式。 "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" : [ { "field_name1" : { "operator1" : value } }, { "field_name2" : { "operator1" : value } }, . . ].

請注意,您可以巢狀「和」和「或」。也就是說,您可以在另一個「和」/」或」區塊內巢狀「和」/」或」。不過,這不適用於簡單的欄位。

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

下列範例顯示使用 輸入的引數 1util.transform.toSubscriptionFilter(Map) : Map

Input(s)

引數 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運算式物件時不應在輸入中考慮List的一組欄位名稱 Map(引數 1)。List 也可以是空的。

下列範例顯示使用 輸入的引數 1 和引數 2util.transform.toSubscriptionFilter(Map, List) : Map

Input(s)

引數 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物件 (不能具有「和」或「或」)。對於欄位名稱作為索引鍵,這些欄位的條件是 形式的項目"operator" : "value"。與引數 1 不同,引數 3 不能在同一金鑰中具有多個條件。此外,引數 3 沒有「和」或「或」子句,因此也沒有巢狀涉及。

引數 3 代表嚴格規則的清單,這些規則會新增至SubscriptionFilter表達式物件,因此至少符合其中一個條件才能傳遞篩選條件。

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

下列範例顯示使用 輸入引數 1引數 2引數 3util.transform.toSubscriptionFilter(Map, List, Map) : Map

Input(s)

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