CRUD 与条件写
PutItem/GetItem/UpdateItem、ConditionExpression。
30 分钟
CRUD 与条件写
DynamoDB 的增删改查通过 Item 级 API 完成:PutItem、GetItem、UpdateItem、DeleteItem。语义与 MongoDB CRUD、MySQL DML 一致,但 必须提供完整主键。
学习目标
- 掌握四类基本 Item 操作
- 理解
UpdateItem表达式与ConditionExpression - 对比 MySQL DML 与 MongoDB 更新运算符
核心内容
Create / Replace(PutItem)
aws dynamodb put-item \
--table-name UserProgress \
--item '{
"PK": {"S": "USER#u_1001"},
"SK": {"S": "LESSON#ddb-crud"},
"action": {"S": "view"},
"updatedAt": {"S": "2026-03-01T10:00:00Z"}
}'
PutItem 整项覆盖(同主键存在则替换)。MySQL 等价见 sql-essentials INSERT ... ON DUPLICATE KEY UPDATE。
Read(GetItem)
aws dynamodb get-item \
--table-name UserProgress \
--key '{"PK":{"S":"USER#u_1001"},"SK":{"S":"LESSON#ddb-crud"}}'
仅主键精确查找;条件过滤走 Query/Scan(ddb-query)。
Update 与条件写
client.updateItem(UpdateItemRequest.builder()
.tableName("UserProgress")
.key(Map.of(
"PK", AttributeValue.builder().s("USER#u_1001").build(),
"SK", AttributeValue.builder().s("LESSON#ddb-crud").build()))
.updateExpression("SET #a = :action, viewCount = if_not_exists(viewCount, :zero) + :inc")
.expressionAttributeNames(Map.of("#a", "action"))
.expressionAttributeValues(Map.of(
":action", AttributeValue.builder().s("complete").build(),
":inc", AttributeValue.builder().n("1").build(),
":zero", AttributeValue.builder().n("0").build()))
.conditionExpression("attribute_exists(PK)") // 仅更新已存在项
.build());
ConditionExpression 实现 乐观锁(如 version = :expected)。MongoDB 对照 mongo-crud 的 $inc / $set。
Delete(DeleteItem)
aws dynamodb delete-item \
--table-name UserProgress \
--key '{"PK":{"S":"USER#u_1001"},"SK":{"S":"LESSON#ddb-crud"}}'