dsqe46004 2016-03-25 21:13
浏览 105
已采纳

具有conditionexpression的dynamodb updateitem返回项目是否已更新

I would like to update an item under certain conditions and then I would like to know whether the item was updated when UpdateItem returns.

The documentation seems contradictory to me.

On this page: http://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_UpdateItem.html in the "Conditional Update" example it says "All of the item's attributes, as they appear after the update, are returned in the response."

On this page: https://godoc.org/github.com/aws/aws-sdk-go/service/dynamodb#UpdateItemOutput it says that Attributes is "A map of attribute values as they appeared before the UpdateItem operation"

I don't really want either of these. What I want is a bool that says whether or not there was an update.

This is where my brain is at now:

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"),
})
  • 写回答

2条回答 默认 最新

  • dongyin0628 2017-04-09 23:21
    关注

    One way to do this is to check the Code on the awserr

    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
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 组策略中的计算机配置策略无法下发
  • ¥15 机器学习简单问题解决
  • ¥15 如何绘制动力学系统的相图
  • ¥15 对接wps接口实现获取元数据
  • ¥20 给自己本科IT专业毕业的妹m找个实习工作
  • ¥15 用友U8:向一个无法连接的网络尝试了一个套接字操作,如何解决?
  • ¥30 我的代码按理说完成了模型的搭建、训练、验证测试等工作(标签-网络|关键词-变化检测)
  • ¥50 mac mini外接显示器 画质字体模糊
  • ¥15 TLS1.2协议通信解密
  • ¥40 图书信息管理系统程序编写