AWS AppSync子解析器中如何获取Post父对象的分区键以查询关联User
实现方案
核心逻辑
AWS AppSync的字段级解析器可以通过$context.source(可简写为$ctx.source)获取父对象的全量属性,作用和你参考示例中的parent参数完全一致。
前置条件
你的allPosts查询返回的每一条Post记录中,必须预先存储对应用户的分区键字段,比如字段名为userId(和你DynamoDB Post表中的实际存储字段对应即可)。
调整Post.user字段解析器配置
将原来配置中:pk的占位逻辑替换为从父对象取对应字段即可,修改后完整配置如下:
{ "version" : "2017-02-28", "operation" : "Query", "query" : { "expression" : "PK = :pk AND SK = :sk", "expressionValues" : { ":pk": $util.dynamodb.toDynamoDBJson($ctx.source.userId), ":sk": $util.dynamodb.toDynamoDBJson("profile") } }, "select" : "ALL_ATTRIBUTES" }
请将上述代码中的$ctx.source.userId里的userId替换为你Post表中实际存储用户分区键的字段名
性能优化建议
上述配置会存在典型的N+1查询问题:如果一次查10条Post,就会发起10次单独的DynamoDB请求查关联用户。你可以改用AppSync的BatchGetItem类型解析器,一次性批量拉取所有关联的用户记录,将总请求次数从N+1降至2次。
内容的提问来源于stack exchange,提问作者plutolaser
相关产品推荐
相关产品推荐

