我可以在 AppSync 的嵌套类型中基于 SS 查询对象吗
Can I query objects based on SS in nested types in AppSync
我正在为我的项目使用 AWS appsync 和 DynamoDB,我有以下架构:
type List {
id: String!
title: String!
items: [String!]! ## it's of String Set (SS) type on DynamoDB
}
type Item {
id: String!
name: String!
}
我想获得一份具体的清单以及他们的物品。这些项目的 ID 在 List 对象中。例如
e.g:
List
{
id: "list0001",
title: "My First list",
items: ["item_001", "item_002"]
}
Item
{
id: "item_001",
name: "Item 001"
}
我想在查询时得到如下结果list0001
{
id: "list0001",
title: "My First list",
items: [
{
id: "item_001",
name: "Item 001"
},
{
id: "item_002",
name: "Item 002"
}
]
}
我知道我可以拥有 Item 类型的列表 ID,然后我使用该 ID 来获取项目,但我想通过从 List 类型的字符串集中获取项目来如上所述获得它。我想知道它是否可行。如果是,这两个查询的映射模板是什么。
N.B: 我在我的项目中使用无服务器和 serverless-appsync-plugin
插件。
您可以使用两个表进行设置,ListTable
和 ItemTable
。
ListTable
将存储有关列表的信息。示例条目如下所示:
{
"id": "list_0000",
"title": "List0"
}
ItemTable
将用于将项目与它们所属的列表相关联。示例条目如下所示:
{
"id": "item_0001",
"name": "item1",
"listId": "list_0000"
}
您需要按如下方式修改架构:
type List {
id: String!
title: String!
items: [Item!]! ## A List of Items
}
type Item {
id: String!
name: String!
}
type Query {
getList(listId: ID!): List
}
此设置将请求设置 2 个解析器,1 个在 getList
上,1 个在字段 items
上 List
类型。
您 getList
的请求映射模板如下所示:
{
"version": "2017-02-28",
"operation": "GetItem",
"key": {
"id": $util.dynamodb.toDynamoDBJson($ctx.args.listId),
}
}
响应映射模板为:
$util.toJson($ctx.result)
您的 items
类型 List
的请求映射模板如下所示:
{
"version" : "2018-05-29",
"operation" : "Query",
"query" : {
"expression": "listId = :listId",
"expressionValues" : {
":listId" : { "S": "$ctx.source.id" }
}
}
}
响应映射模板为:
$util.toJson($ctx.result.items)
运行查询:
query {
getList(listId: "list_0000") {
id
title
items {
id
name
}
}
}
结果如下:
{
"data": {
"getList": {
"id": "list_0000",
"title": "List0",
"items": [
{
"id": "item_0001",
"name": "item1"
}
]
}
}
}
我正在为我的项目使用 AWS appsync 和 DynamoDB,我有以下架构:
type List {
id: String!
title: String!
items: [String!]! ## it's of String Set (SS) type on DynamoDB
}
type Item {
id: String!
name: String!
}
我想获得一份具体的清单以及他们的物品。这些项目的 ID 在 List 对象中。例如
e.g:
List
{
id: "list0001",
title: "My First list",
items: ["item_001", "item_002"]
}
Item
{
id: "item_001",
name: "Item 001"
}
我想在查询时得到如下结果list0001
{
id: "list0001",
title: "My First list",
items: [
{
id: "item_001",
name: "Item 001"
},
{
id: "item_002",
name: "Item 002"
}
]
}
我知道我可以拥有 Item 类型的列表 ID,然后我使用该 ID 来获取项目,但我想通过从 List 类型的字符串集中获取项目来如上所述获得它。我想知道它是否可行。如果是,这两个查询的映射模板是什么。
N.B: 我在我的项目中使用无服务器和 serverless-appsync-plugin
插件。
您可以使用两个表进行设置,ListTable
和 ItemTable
。
ListTable
将存储有关列表的信息。示例条目如下所示:
{
"id": "list_0000",
"title": "List0"
}
ItemTable
将用于将项目与它们所属的列表相关联。示例条目如下所示:
{
"id": "item_0001",
"name": "item1",
"listId": "list_0000"
}
您需要按如下方式修改架构:
type List {
id: String!
title: String!
items: [Item!]! ## A List of Items
}
type Item {
id: String!
name: String!
}
type Query {
getList(listId: ID!): List
}
此设置将请求设置 2 个解析器,1 个在 getList
上,1 个在字段 items
上 List
类型。
您 getList
的请求映射模板如下所示:
{
"version": "2017-02-28",
"operation": "GetItem",
"key": {
"id": $util.dynamodb.toDynamoDBJson($ctx.args.listId),
}
}
响应映射模板为:
$util.toJson($ctx.result)
您的 items
类型 List
的请求映射模板如下所示:
{
"version" : "2018-05-29",
"operation" : "Query",
"query" : {
"expression": "listId = :listId",
"expressionValues" : {
":listId" : { "S": "$ctx.source.id" }
}
}
}
响应映射模板为:
$util.toJson($ctx.result.items)
运行查询:
query {
getList(listId: "list_0000") {
id
title
items {
id
name
}
}
}
结果如下:
{
"data": {
"getList": {
"id": "list_0000",
"title": "List0",
"items": [
{
"id": "item_0001",
"name": "item1"
}
]
}
}
}