我使用了带有React的AWS放大,GraphQL API。它利用了AWS AppSync。我是graphQL的新手,我的模式目前是这样的。这是放大应用程序中的模式:
type Note @model {
id: ID!
name: String!
title: String
movie: String
}
例如,我想在Note类型的组件中存储一个对象数组,如下所示:
type Note @model {
id: ID!
name: String!
title: String
movie: String
components: []
}
我知道我可以创建一个新表并这样做:
type Note @model {
id: ID!
name: String!
title: String
movie: String
components: [elements!]!
}
type elements @model {
id: ID!
item: String!
}
但是,我不想创建一个新表。有什么可能的方法可以做到这一点吗?
我在我们的平台上看到了类似的问题,他们建议使用AWSJSON AWS标量类型
但是没有实际的资源来使用它们。如果这是解决方案,请帮助我完成程序,我们如何为它们编写突变。
我找到了解决方案:
通过使用AWSJSON,我们可以在DynamoDB 中创建带有映射的阵列,而无需创建新表
复制程序:
首先将AWSJSON添加到Schema Graphql中,如下所示,
type Note @model {
id: ID!
name: String!
title: String
movie: String
components: AWSJSON
}
使用create mutation时,以JSON格式传递数据
示例:
let input = `[{"isPending":false,"isAccepted":false}]`
在使用更新突变时,AWSJSON出现了一个问题,它不会更新现有的映射,而是会在阵列中创建一个新的映射。
此问题的解决方案是使用_version
听起来您确实希望在架构中有一个新的elements
类型,但您应该将解析程序配置为指向Note
的解析程序所指向的任何表中的类似数组的列。请记住,graphQL架构中的类型不一定需要与数据源中的类型一一对应。您的数据库结构是什么样子的?
假设您想在下面的@model
的components
中保存String
的Array
:
type Note @model {
id: ID!
name: String!
title: String
movie: String
components: []
}
您可以使用AWSJSON
并将其保存为如上所述的字符串格式,也可以尝试以下方式:
type Note @model {
id: ID!
name: String!
title: String
movie: String
components: [String]
}