【问题标题】:AWS AppSync RDS: $util.rds.toJSONObject() Nested ObjectsAWS AppSync RDS:$util.rds.toJSONObject() 嵌套对象
【发布时间】:2020-01-21 16:08:15
【问题描述】:

我将 Amazon RDS 与 AppSync 结合使用。我创建了一个解析器,它连接两个表以获得它们之间的一对一关联并从两个表中返回列。我想做的是能够将一些列嵌套在使用 $util.rds.toJSONObject() 评估的结果解析 JSON 对象中的一个键下。

这是架构:

type Parent {
    col1: String
    col2: String
    child: Child
}

type Child {
    col3: String
    col4: String
}

这是解析器:

{
    "version": "2018-05-29",
    "statements": [
        "SELECT parent.*, child.col3 AS `child.col3`, child.col4 AS `child.col4` FROM parent LEFT JOIN child ON parent.col1 = child.col3"
    ]
}

我尝试使用点语法命名结果列,但 $util.rds.toJSONObject() 没有将 col3col4 放在 child 键下。之所以应该这样做是因为否则,Apollo 将无法缓存和解析实体。

注意:点语法没有记录在任何地方。通常,一些 ORM 使用点语法技术将 SQL 行转换为适当的嵌套 JSON 对象。

【问题讨论】:

  • $util.rds.toJsonObject() 将 RDS sql 结果转换为更友好的格式 - JSON 对象。它不是一个成熟的 ORM。您需要自己编写此自定义逻辑。您可以将$util.rds.toJSONObject() 的输出作为具有字符串键和对象值的映射列表进行操作。此外,附加到该解析器的预期输出类型是什么? (是父母名单吗?)
  • 我求助于使用 sequelize 来查询和返回数据的 AWS Lambda 解析器。效果很好。我可以轻松地查询 JSON 中的关系。

标签: amazon-web-services aws-appsync amazon-aurora


【解决方案1】:

假设您的解析器期望返回父类型列表,即。 [Parent!]!,你可以这样写你的响应映射模板逻辑:

#if($ctx.error)
    $util.error($ctx.error.message, $ctx.error.type)
#end

#set($output = $utils.rds.toJsonObject($ctx.result)[0])

## Make sure to handle instances where fields are null
## or don't exist according to your business logic

#foreach( $item in $output )
    #set($item.child = {
        "col3": $item.get("child.col3"),
        "col4": $item.get("child.col4")
    })
#end

$util.toJson($output)

【讨论】:

    【解决方案2】:

    @Aaron_H 评论和答案对我很有用,但答案中提供的响应映射模板对我不起作用。 我设法为我的案例获得了一个有效的响应映射模板,这与所讨论的案例类似。在下面的图片中,您将找到查询信息 -> message(id: ID) { ... }(将返回一条消息和关联的用户):

    1. user表的SQL请求;
    2. message表的SQL请求;
    3. SQL JOIN 表请求消息 id=1;
    4. GraphQL 架构;
    5. 请求和响应模板;
    6. AWS AppSync 查询。

    https://github.com/xai1983kbu/apollo-server/blob/pulumi_appsync_2/bff_pulumi/graphql/resolvers/Query.message.js


    查询消息的下一个示例

    https://github.com/xai1983kbu/apollo-server/blob/pulumi_appsync_2/bff_pulumi/graphql/resolvers/Query.messages.js

    【讨论】:

      猜你喜欢
      • 2019-01-19
      • 2021-04-24
      • 2022-11-10
      • 2020-01-17
      • 2019-10-09
      • 2019-09-24
      • 1970-01-01
      • 2018-12-22
      • 2018-10-12
      相关资源
      最近更新 更多