透過 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
操作將 Plays 增加 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 Update
陳述式,使用 ExecuteStatement
操作修改資料表中的項目。
此資料表的主要索引鍵由 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'