DynamoDB UpdateItem的attribute_not_exists条件表达式不生效问题
问题根因
你的条件表达式判断对象错误,导致校验逻辑完全不符合预期:
- 你要实现的效果是当待更新的
settingValue属性已存在时不更新,但当前代码的条件attribute_not_exists($ATTRIBUTE_KEY)是判断主键settingName的值对应的项中,是否存在名为$ATTRIBUTE_KEY的属性,这和你要校验的settingValue完全无关。 - 额外的参数错误:
--region的取值应为us-east-1,你漏写了中间的横杠,可能会导致区域请求失败。
修正后的代码
aws dynamodb update-item \ --region us-east-1 \ --table-name TABLE_NAME \ --key '{"settingName":{"S":"'"$ATTRIBUTE_KEY"'"}}' \ --update-expression 'SET #VAL = :val' \ --expression-attribute-names '{"#VAL":"settingValue"}' \ --expression-attribute-values '{":val":{"'"$DATA_TYPE"'":'"$ATTRIBUTE_VALUE"'}}' \ --condition-expression "attribute_not_exists(#VAL)" \ --return-values ALL_NEW
改动说明
- 条件表达式改用表达式属性名
#VAL指代settingValue,直接校验目标属性是否存在,符合你的业务需求 - 修正了区域名的拼写错误
- 保留了原有的表达式属性名规则,避免DynamoDB保留字冲突问题
内容的提问来源于stack exchange,提问作者Auto geek
相关产品推荐
相关产品推荐

