借助 DynamoDB API,您可以使用 UpdateItem
操作修改单个项目。
{
TableName: "Music",
Key: {
"Artist":"No One You Know",
"SongTitle":"Call Me Today"
},
UpdateExpression: "SET RecordLabel = :label",
ExpressionAttributeValues: {
":label": "Global Records"
}
}
必须指定要修改的项目的 Key
属性和 UpdateExpression
才能指定属性值。UpdateItem
行为类似于“upsert”操作。如果表中存在该项目,则会对其进行更新,但如果不存在,则会添加(插入)一个新项目。
UpdateItem
支持条件写入,在此情况下,操作仅在特定 ConditionExpression
的计算结果为 true 时成功完成。例如,除非歌曲的价格大于或等于 2.00,否则以下 UpdateItem
操作不会执行更新。
{
TableName: "Music",
Key: {
"Artist":"No One You Know",
"SongTitle":"Call Me Today"
},
UpdateExpression: "SET RecordLabel = :label",
ConditionExpression: "Price >= :p",
ExpressionAttributeValues: {
":label": "Global Records",
":p": 2.00
}
}
UpdateItem
还支持原子计数器 或类型为 Number
的属性(可递增或递减)。原子计数器在很多方面都类似于 SQL 数据库中的顺序生成器、身份列或自递增字段。
以下是一个 UpdateItem
操作的示例,它初始化一个新属性(Plays)来跟踪歌曲的已播放次数。
{
TableName: "Music",
Key: {
"Artist":"No One You Know",
"SongTitle":"Call Me Today"
},
UpdateExpression: "SET Plays = :val",
ExpressionAttributeValues: {
":val": 0
},
ReturnValues: "UPDATED_NEW"
}
ReturnValues
参数设置为 UPDATED_NEW
,这将返回已更新的任何属性的新值。在此示例中,它返回 0 (零)。
当某人播放此歌曲时,可使用以下 UpdateItem
操作来将播放次数增加 1。
{
TableName: "Music",
Key: {
"Artist":"No One You Know",
"SongTitle":"Call Me Today"
},
UpdateExpression: "SET Plays = Plays + :incr",
ExpressionAttributeValues: {
":incr": 1
},
ReturnValues: "UPDATED_NEW"
}
使用 PartiQL,您可以通过使用 PartiQL ExecuteStatement
语句来使用 Update
操作修改表中的项目。
此表的主键包含 Artist 和 SongTitle。您必须为这些属性指定值。
UPDATE Music
SET RecordLabel ='Global Records'
WHERE Artist='No One You Know' AND SongTitle='Call Me Today'
如下例所示,您还可以一次修改多个字段。
UPDATE Music
SET RecordLabel = 'Global Records'
SET AwardsWon = 10
WHERE Artist ='No One You Know' AND SongTitle='Call Me Today'
Update
还支持原子计数器 或类型为 Number
的属性(可递增或递减)。原子计数器在很多方面都类似于 SQL 数据库中的顺序生成器、身份列或自递增字段。
以下是一个 Update
语句的示例,它初始化一个新属性 (Plays) 来跟踪歌曲的已播放次数。
UPDATE Music
SET Plays = 0
WHERE Artist='No One You Know' AND SongTitle='Call Me Today'
当某人播放此歌曲时,可使用以下 Update
语句来将 Plays 增加 1。
UPDATE Music
SET Plays = Plays + 1
WHERE Artist='No One You Know' AND SongTitle='Call Me Today'