AWS AppSync GraphQL:DynamoDB ConditionalCheckFailedException更新中的对象时
我正在使用graphql为使用amplify和appsync的react本机应用程序建模一个用户对象。我需要在创建用户后更新名称字段,但是我得到了DynamoDB:ConditionalCheckFailedException。创建用户和查询用户表工作正常,我只是不能更新现有对象的字段 我正在我的项目目录中定义用户类型(放大/backend/api/schema.graphql),并让放大CLI根据我的模式类型生成graphql语句(查询、突变和订阅) 我正在使用的模式:AWS AppSync GraphQL:DynamoDB ConditionalCheckFailedException更新中的对象时,graphql,amazon-dynamodb,aws-appsync,Graphql,Amazon Dynamodb,Aws Appsync,我正在使用graphql为使用amplify和appsync的react本机应用程序建模一个用户对象。我需要在创建用户后更新名称字段,但是我得到了DynamoDB:ConditionalCheckFailedException。创建用户和查询用户表工作正常,我只是不能更新现有对象的字段 我正在我的项目目录中定义用户类型(放大/backend/api/schema.graphql),并让放大CLI根据我的模式类型生成graphql语句(查询、突变和订阅) 我正在使用的模式: type User @
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
}
我运行一个变种来创建一个具有登录用户凭据的用户。从AppSync控制台,我以Cognito用户的身份使用相同的用户名(745ab477-5702-4f8d-b938-a987a3d9d192)登录,并运行以下操作:
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用户表:
您应该在架构中指定主键
type User @model @auth(rules: [{allow: owner}]) {
id:ID!,
username: String!
name: String
}
并更改您的请求,如下所示
mutation updateSampleUser{
updateSampleUser(
input:{name:"James",id:"9f4...."}
)
{
name
}
}
它相当于下面的SQL语句
使用
@auth(规则:[{allow:owner}])
just owner可以进行更新。您应该在模式中指定主键
type User @model @auth(rules: [{allow: owner}]) {
id:ID!,
username: String!
name: String
}
并更改您的请求,如下所示
mutation updateSampleUser{
updateSampleUser(
input:{name:"James",id:"9f4...."}
)
{
name
}
}
它相当于下面的SQL语句
使用
@auth(规则:[{allow:owner}])
just owner可以进行更新。欢迎您,您找到了上一个问题(添加主键)的答案了吗?欢迎您,您找到了上一个问题(添加主键)的答案了吗?