DynamoDB Go SDK UpdateExpression执行简单加法更新报错如何解决?
错误原因排查
第一次报错原因
DynamoDB 更新表达式语法不支持直接在运算中写入数值字面量,所有动态数值必须通过ExpressionAttributeValues定义占位符传递,直接写+ 1属于语法不允许的字面量用法,并非SDK不支持加法更新操作。
第二次报错原因
你混淆了DynamoDB两类表达式占位符的用法:
- 以
:开头的是表达式属性值,仅可用于传递属性的取值,不能放在SET关键字后作为属性名使用 - 你错误地将属性名
ItemCount定义为字符串类型的属性值占位符,放在了赋值语句左侧,直接触发语法错误
条目不存在的疑问澄清
两次报错均为请求层面的语法错误,请求并未执行到后续的条目存在性判断逻辑。官方文档描述无误,只要更新表达式语法正确,UpdateItem会自动创建不存在的条目,并将ItemCount初始化为1。
正确实现代码
不需要属性名占位的常规写法:
UpdateExpression: aws.String("SET ItemCount = ItemCount + :incr"), ExpressionAttributeValues: map[string]*dynamodb.AttributeValue{ ":incr": {N: aws.String("1")}, },
如果属性名和DynamoDB保留字冲突,需要使用属性名占位符(以#开头):
UpdateExpression: aws.String("SET #itemCount = #itemCount + :incr"), ExpressionAttributeNames: map[string]*string{ "#itemCount": aws.String("ItemCount"), }, ExpressionAttributeValues: map[string]*dynamodb.AttributeValue{ ":incr": {N: aws.String("1")}, },
内容的提问来源于stack exchange,提问作者Dean Schulze
相关产品推荐
相关产品推荐

