AWS Appsync解析器用于更新的相关表

时间:2018-06-05 18:29:55

标签: amazon-web-services aws-appsync

我正在尝试为相关实体编写解析器。

以下是我的架构的外观。

type User{
id:ID!
name: String!
posts:[Post] #Resolver 1
}

type Post{
id:ID!,
title: String!
body: String!
}

type CreatePostInput{
id:ID!,
title: String!
body: String!
}
type mutation{
addUserPost(userid:ID!, input:CreatePostInput!): Post
}

现在我为帖子添加了一个解析器(请参阅#resolver 1)

{
"version" : "2017-02-28",
"operation" : "Scan",
 "key": {
    "userid" : { "S" : "${context.source.id}" }
},
}

现在我为变种addUserPost添加了一个解析器

{
  "version" : "2017-02-28",
  "operation" : "PutItem",
   "key": {
      "userid" : { "S" : "${context.arguments.userid}" },
     "input" : $util.dynamodb.toDynamoDBJson(${context.arguments.input})     
     }    
}

现在我运行查询

mutation addnewposttest{
  addChapterToCourse(addUserPost:"c85a0508-ee0e-4ad8-8629-34880e1c6d74",
    input:{
      title:"Demo",
      body:"Test Body",
      id: "c85a0508-c85a0-508c-85a-0508"
    }){
      id
    }
}

我得到DynamoDB:AmazonDynamoDBException,因为一个或多个参数值无效:缺少项目中的密钥ID(服务:AmazonDynamoDBv2;状态代码:400;错误代码:ValidationException;请求ID:XXXXXXXXXXXX

我尝试更改第二个解析器的数据源,但没有运气。除了this之外,我没有在AWS中找到任何好的文档,但这涉及简单的字符串数据类型,而不是对象类型集合。

有人可以帮助我理解,如何处理解析器中的关系?感谢

2 个答案:

答案 0 :(得分:0)

正如我评论的那样,你有一些更新。

但主要问题是addUserPost的解析器模板包含userid,但看起来您需要将其更改为id。看起来您的用户类型或帖子类型没有名为userid

的字段

答案 1 :(得分:0)

我指的是两个单独的数据表,并将数据存储在两个表中,我需要使用BatchUpdate项并指定表名。但是,我无法在我的用例中执行此操作,我必须在一个表中插入并在另一个表中更新。

最后,我最终在另一个集合中复制了Id,并在其上构建了一个索引。

这是我最终架构的样子

type User{
id:ID!
name: String!
posts:[Post] #Resolver 1 -
}

type Post{
id:ID!,
userId:ID!# I will look for source.id on this field
title: String!
body: String!
}

感谢大家投球!