首页 > 解决方案 > AWS AppSync 根据父结果获取子结果

问题描述

我将 GraphQL 和 DynamoDB 与邻接列表模式一起使用,因为我只使用一个表。

说我有架构 -

type GrandParent {
   id: ID!
   children: [Parent]
}

type Parent {
   id: ID!
   children: [Child]
}

type Child {
   id: ID!
}

type Query {
   getGrandParent(id: ID): GrandParent
}

对于 dynamodb,我有以下主键结构 -

为祖父母 pk = GRANDPARENT_<id>, sk = GRANDPARENT

为家长 pk = PARENT_<ID>, sk = GRANDPARENT_<id>

儿童 pk = CHILD_<id>, sk = PARENT_<id>

使用将反转密钥的 GSI。

所以,给定一个祖父母 ID,我可以使用 GSI 找到所有父母,因为我知道祖父母 ID,所以我可以这样做 -where sk = GRANDPARENT_<id> and pk begins with PARENT_ID这将带回所有父母,但是我怎样才能获得这些父母的 ID 和现在去拿所有的孩子记录吗?是否可以在一个 graphql 请求中多次访问数据库?

标签: graphqlamazon-dynamodbaws-appsync

解决方案


感谢评论中的人 - 将他们的建议拼凑在一起,我能够弄清楚。我真正的症结是不知道如何使用 DynamoDB 的 AppSync 解析器映射模板从已解析的父级获取值,我可以使用它#ctx.source.id来获取父级 ID,因此我可以通过查询正确构建 -

{
    "version" : "2017-02-28",
    "operation" : "Query",
    "query" : {
        "expression" : "#sk = :sk and begins_with(#pk, :pk)",
        "expressionNames" : {
            "#pk" : "pk",
            "#sk" : "sk"
        },
        "expressionValues" : {
            ":pk" : $util.dynamodb.toDynamoDBJson("CHILD"),
            ":sk" : $util.dynamodb.toDynamoDBJson("PARENT_$context.source.id")
       }
    },
    "index": "invertedIndex"
}

推荐阅读