$util.transform 中的转型助手 - Amazon AppSync
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

$util.transform 中的转型助手

$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输入对象。第二个参数是List构造SubscriptionFilter表达式对象时在第一个Map输入对象中被忽略的字段名。

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

Map输入对象转换为SubscriptionFilter表达式对象。该$util.transform.toSubscriptionFilter方法用作$extensions.setSubscriptionFilter()扩展的输入。有关更多信息,请参阅扩展

第一个参数是转换为SubscriptionFilter表达式对象的Map输入对象,第二个参数是List字段名称,将在第一个Map输入对象中被忽略,第三个参数是包含严格规则的Map输入对象构造SubscriptionFilter表达式对象。这些严格的规则包含在SubscriptionFilter表达式对象中,这样至少要满足其中一条规则才能通过订阅过滤器。

订阅过滤器参数

下表说明了如何定义以下实用程序的参数:

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

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

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

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 或 OR 逻辑连接这些条目中的所有条目。键值 “and” 和 “or” 需要一系列条件。

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

请注意,你可以嵌套 “和” 和 “或”。也就是说,你可以将 “and”/“or” 嵌套在另一个 “and”/“or” 块中。但是,这不适用于简单字段。

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

以下示例显示了使用参数 1 的输入$util.transform.toSubscriptionFilter(Map) : Map

输入

参数 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 包含List的字段名称不应在构造SubscriptionFilter表达式对象时在输入Map(参数 1)中考虑。List也可以为空。

以下示例显示了使用参数 1 和参数 2 的输入$util.transform.toSubscriptionFilter(Map, List) : Map

输入

参数 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 } } . . .

以下示例使用显示了参数 1参数 2参数 3 的输入$util.transform.toSubscriptionFilter(Map, List, Map) : Map

输入

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