将对象存储到数组中,而不在 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 S3
无法将大型 graphql 模式上传到 aws appsync