仅当列表不含指定值时更新DynamoDB条目异常排查
DynamoDB列表添加元素去重问题解决
你的代码存在关键逻辑错误:ExpressionAttributeValues中:i被定义为数组[new_value],但contains函数是用来检查列表中是否存在单个元素,而非数组。这就导致即使MyList里已经有new_value这个元素,contains(MyList, :i)实际检查的是列表里有没有[new_value]这个数组,自然返回false,加上NOT后条件判定成立,更新执行后就会出现重复值。
修正后的代码
核心是将:i设为单个值,在UpdateExpression里再把它包装成数组传递给list_append:
var params = { TableName: "table_name", Key: { PartKey: "part_key", SortKey: "sort_key" }, UpdateExpression: "SET MyList = list_append(MyList, [:i])", ConditionExpression: "NOT contains(MyList, :i)", ExpressionAttributeValues: { ":i": new_value // 此处改为单个值,而非数组 } }
修改后,ConditionExpression会正确检查MyList中是否已存在目标元素,只有当元素不存在时,才会通过list_append将其作为单个元素追加到列表末尾,彻底避免重复添加问题。
内容的提问来源于stack exchange,提问作者Sébastien Serre
相关产品推荐
相关产品推荐

