C#操作DynamoDB插入相同主键数据如何避免覆盖原有数据
DynamoDB插入相同主键不覆盖原有数据的实现方案
DynamoDB的PutItem默认逻辑就是主键存在则覆盖整条数据,要实现不覆盖的写入,只需要调整条件表达式规则即可,你现有代码的条件逻辑写反了。
现有代码的问题
- 你当前使用的
ConditionExpression = "attribute_exists(pk)"规则是要求主键已存在时才允许执行写入,和你的需求完全相反 - 你代码里的主键属性是
User,条件表达式里写的pk和实际主键属性名不匹配,即使逻辑对也不会生效 - 多余配置了
ExpressionAttributeValues,这个场景不需要额外传变量
修正后的代码
var putItemRequest = new PutItemRequest { TableName = "MovieRating", Item = new Dictionary<string, AttributeValue> { { "User", new AttributeValue { S = movieRating.User } }, { "Comment", new AttributeValue { S = movieRating.Comment } }, { "MovieTitle", new AttributeValue { N = movieRating.MovieTitle.ToString() } }, { "Rate", new AttributeValue { N = movieRating.Rate.ToString() } } }, // 核心规则:仅当主键User不存在时才执行写入 ConditionExpression = "attribute_not_exists(User)" };
执行逻辑说明
请求提交后,如果对应User主键已存在,DynamoDB会抛出ConditionalCheckFailedException异常,捕获该异常即可判定为重复写入,原有数据不会被覆盖。
内容的提问来源于stack exchange,提问作者Nooty
相关产品推荐
相关产品推荐

