带有条件表达式的 dynamodb updateitem 返回 item 是否更新

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


文档对我来说似乎矛盾。


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


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


我真的不想要这些。我想要的是一个布尔值,表示是否有更新。


这是我的大脑现在的位置:


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"),

})


四季花海
浏览 234回答 3
3回答

冉冉说

要做到这一点的方法之一是检查Code的awserrimport "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}

BIG阳

现在有常量来比较错误,而不是像其他答案一样使用硬编码字符串:result, err := svc.UpdateItem(input)if err != nil {    if aerr, ok := err.(awserr.Error); ok {        switch aerr.Code() {        case dynamodb.ErrCodeConditionalCheckFailedException:            fmt.Println(dynamodb.ErrCodeConditionalCheckFailedException, aerr.Error())        default:            fmt.Println(aerr.Error())        }    }}

侃侃尔雅

原来我想要做的是检查错误以查看它是否包含 string ConditionalCheckFailedException。func Lock() (bool, error) {  ...  _, err := db.DynamoDB.UpdateItem(v)  if err != nil {    if strings.Contains(err.Error(), "ConditionalCheckFailedException") {      return false, nil    }    return false, err  }  return true, nil}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go