将对象存储到数组中而不在 AWS AppSync 架构中创建新的 table

Store objects into array without creating a new table in AWS AppSync schema

我将 AWS amplify 与 React 结合使用,而 GraphQL API.that 利用 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: []
}

我知道我可以创建一个新的 table 并执行此操作:

type Note @model {
  id: ID!
  name: String!
  title: String
  movie: String
  components: [elements!]!
}
 
 type elements @model {
  id: ID!
  item: String!
}

但是,我不想创建新的 table。有什么可行的方法吗?

我在我们的平台上看到了类似的问题,他们建议使用 AWSJSON AWS Scalar Types

但是没有实际的资源可以使用它们。如果那是解决方案,请帮助我完成这些程序,我们如何为他们编写突变。

听起来您确实想要一个新的 elements 类型在您的架构中,但您应该配置解析器以使其指向任何 table 中的类似数组的列 Note 的解析器指向。请记住,graphQL 模式中的类型不一定需要与数据源中的内容一一对应。您的数据库结构是什么样的?

我找到了解决方案:

通过使用 AWSJSON,我们无需在 DynamoDBtable 中创建新的 table 即可创建带映射的数组

重现过程:

First Add the AWSJSON to the Schema Graphql like below,

type Note @model {
  id: ID!
  name: String!
  title: String
  movie: String
  components: AWSJSON
}

While using create mutation, Pass the data in JSON format

示例:

let input = `[{\"isPending\":false,\"isAccepted\":false}]`

While using update mutation there was an issue with AWSJSON which will not update the map existing instead, it will create a new map in the Array.

此问题的解决方案是使用 _version