graphql - 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 请求中多次访问数据库?
解决方案
感谢评论中的人 - 将他们的建议拼凑在一起,我能够弄清楚。我真正的症结是不知道如何使用 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"
}
推荐阅读
- java - 如何使用 apache camel bindy 将两个 xml 标签合并为一个 xml
- amazon-web-services - 如何将面向 ELB 的公众设为私有?
- c++ - 如何将 CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) 输入(鼠标点击、按键)传递给类
- css - 角材料表多个粘性行
- kubernetes - 如何在 Kubernetes 中重启主节点
- python - % 符号显示在路径中
- teamcity - Teamcity 和 AWS CLI
- python - 如何强制库(pybind11)包含
来自 Python3? - c# - 超链接不呈现 Xamarin.forms
- java - MySQL - 使用 INFILE 时将变量插入列