gpt4 book ai didi

amazon-web-services - dynamodb updateitem with conditionexpression 返回项目是否更新

转载 作者:IT王子 更新时间:2023-10-29 02:14:50 33 4
gpt4 key购买 nike

我想在特定条件下更新一个项目,然后我想知道当 UpdateItem 返回时该项目是否已更新。

文档对我来说似乎自相矛盾。

在此页面上:http://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_UpdateItem.html在“条件更新”示例中,它说“更新后出现的所有项目属性都在响应中返回。”

在此页面上:https://godoc.org/github.com/aws/aws-sdk-go/service/dynamodb#UpdateItemOutput它说 Attributes 是“在 UpdateItem 操作之前出现的属性值映射”

我真的不想要这两个。我想要的是一个 bool 值,说明是否有更新。

这是我现在的大脑:

out, err := db.DynamoDB.UpdateItem(&dynamodb.UpdateItemInput{
TableName: tableName,
Key: map[string]*dynamodb.AttributeValue{
"KeyName": {S: aws.String(keyname)},
},
ExpressionAttributeNames: map[string]*string{
"#lock": aws.String("Lock"),
},
ExpressionAttributeValues: map[string]*string{
":now": aws.String(compfmt(time.Now())),
":promise": aws.String(compfmt(time.Now().Add(30 * time.Second))),
},
ConditionExpression: aws.String("attribute_not_exist(#lock) OR :now > #lock"),
UpdateExpression: aws.String("SET #lock = :promise"),
})

最佳答案

一种方法是检查 awserr 上的 Code

import "github.com/aws/aws-sdk-go/aws/awserr"
func Lock()(bool, error) {
//Create value v
_, err := db.DynamoDB.UpdateItem(v)
if err != nil {
if ae, ok := err.(awserr.RequestFailure); ok && ae.Code() == "ConditionalCheckFailedException" {
return false, nil
}
return false, err
}
return true, nil
}

关于amazon-web-services - dynamodb updateitem with conditionexpression 返回项目是否更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36228130/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com