将对象存储到数组中,而无需在AWS AppSync架构中创建新表



我使用了带有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架构中的类型不一定需要与数据源中的类型一一对应。您的数据库结构是什么样子的?

假设您想在下面的@modelcomponents中保存StringArray

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]
}

最新更新