我正在使用graphql为User对象建模,以使用放大和appsync来响应本机应用程序。创建用户后,我需要更新名称字段,但是我得到了DynamoDB:ConditionalCheckFailedException。创建用户和查询User表工作正常,我只是无法更新现有对象的字段。
我正在项目目录(amplify / backend / api / schema.graphql)中定义用户类型,并让放大CLI根据我的模式类型生成GraphQL语句(查询,突变和订阅)。
我正在使用的架构:
type User @model @auth(rules: [{allow: owner}]) {
username: String!
name: String
}
type Mutation {
createUser(input: CreateUserInput!, condition: ModelUserConditionInput): User
updateUser(input: UpdateUserInput!, condition: ModelUserConditionInput): User
deleteUser(input: DeleteUserInput!, condition: ModelUserConditionInput): User
}
input UpdateUserInput {
username: String
name: String
}
我运行了一个变体,以使用登录用户的凭据创建一个User。从AppSync控制台,以具有相同用户名(745ab477-5702-4f8d-b938-a987a3d9d192)的Cognito用户身份登录,然后运行以下突变:
mutation updateUser{
updateUser(input: {
name: "James"
}
condition:{
username: {eq: "745ab477-5702-4f8d-b938-a987a3d9d192"}
}){
username
name
}
}
哪个会产生:
{
"data": {
"updateUser": null
},
"errors": [
{
"path": [
"updateUser"
],
"data": null,
"errorType": "DynamoDB:ConditionalCheckFailedException",
"errorInfo": null,
"locations": [
{
"line": 40,
"column": 5,
"sourceName": null
}
],
"message": "The conditional request failed (Service: AmazonDynamoDBv2; Status Code: 400; Error Code: ConditionalCheckFailedException; Request ID: HND4VSCK8HLM5NC08VDEV51CORVV4KQNSO5AEMVJF66Q9ASUAAJG)"
}
]
}
这是添加当前用户后的DynamoDB用户表:
答案 0 :(得分:3)
您应在架构中指定主键
mutation updateSampleUser{
updateSampleUser(
input:{name:"James",id:"9f4...."}
)
{
name
}
}
并按如下所示更改您的请求
update tbl1 set name = "James" where id = "9f4...."
它等效于以下SQL语句
@auth(rules: [{allow: owner}])
并使用{{1}},只有所有者可以进行更新。