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

Posted

技术标签:

【中文标题】将对象存储到数组中,而不在 AWS AppSync 架构中创建新表【英文标题】:Store objects into array without creating a new table in AWS AppSync schema 【发布时间】:2021-09-25 06:29:44 【问题描述】:

我将 AWS amplify 与 React 以及利用 AWS AppSync 的 GraphQL API 结合使用。我对 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 Scalar Types

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

【问题讨论】:

【参考方案1】:

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

【讨论】:

实际上,我想创建一个对象数组而不创建这样的新表:组件:[object.object.object] 你能建议一些关于创建这个的资源吗?通过appsync放大cli【参考方案2】:

我找到了解决办法:

通过使用 AWSJSON,我们无需在 DynamoDB 中创建新表就可以创建一个带有地图的数组

复制过程:

首先将 AWSJSON 添加到 Schema Graphql 中,如下所示,

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

使用创建突变时,以 JSON 格式传递数据

例子:

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

在使用更新突变时,AWSJSON 存在一个问题,它不会更新现有的地图,而是会在数组中创建一个新地图。

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

【讨论】:

以上是关于将对象存储到数组中,而不在 AWS AppSync 架构中创建新表的主要内容,如果未能解决你的问题,请参考以下文章

AWS AppSync 订阅:基于更新文档中的对象的复杂授权

在子解析器 AWS AppSync 中获取父对象

如何使用 AWS AppSync 将文件上传到 AWS S3

无法将大型 graphql 模式上传到 aws appsync

使用 AWS AppSync 将项目附加到 DynamoDB

如何将签名的 HTTP 请求从 AWS Lambda 发送到 AppSync GraphQL?