本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
UpdateItem
重要
本節涉及不該再用於新應用程式的已棄用 API 版本 2011-12-05。
如需目前低階 API 的文件,請參閱Amazon DynamoDB API 參考。
描述
編輯現有項目的屬性。您可以執行條件式更新 (在新的屬性名稱值組不存在時插入新的,或者在現有名稱值組具有某些預期的屬性值時將其取代)。
注意
您無法使用更新主索引鍵屬性 UpdateItem。請改為刪除該項目,然後用 PutItem 來建立具有新屬性的新項目。
該 UpdateItem 操作包括一個Action
參數,用於定義如何執行更新。您可以放入、刪除或新增屬性值。
屬性值不得為 Null;字串和二進位類型屬性的長度必須大於零;集合類型屬性不可為空白。具有空值的請求會遭到拒絕,並出現 ValidationException
。
如果現有項目具有指定的主索引鍵:
PUT:新增指定的屬性。如果屬性存在,則會以新值取代。
DELETE:如果未指定任何值,則會移除屬性及其值。如果有指定一組值,則所指定集合中的值將從舊集合中移除。因此,如果屬性值包含 [a、b、c],而刪除動作包含 [a、c],則最後屬性值為 [b]。指定值類型必須符合現有值類型。指定空集合無效。
ADD:僅對數字使用新增動作,或者在目標屬性為集合 (包括字串集合) 時使用。如果目標屬性為單一字串值或純量二進位值,則 ADD 無法運作。指定的值會新增至數值 (現有的數值進行遞增或遞減),或者新增為字串集合中的額外值。如果有指定一組值,則會將這些值新增至現有的集合中。例如,如果原始集合為 [1、2],而提供的值為 [3],則在新增操作之後,集合為 [1、2、3],而非 [4、5]。如果已為集合屬性指定 Add 動作,且指定的屬性類型與現有集合類型不符,則會發生錯誤。
如果對不存在的屬性使用 ADD,則會將屬性及其值新增至項目。
如果沒有項目符合所指定的主索引鍵:
PUT:建立具有指定主索引鍵的新項目。然後新增指定屬性。
DELETE:不進行任何動作。
ADD:建立具有提供的主索引鍵和屬性值數字 (或一組數字) 的項目。不適用於字串或二進位類型。
注意
如果對更新前不存在的項目使用 ADD
增減數值,則 DynamoDB 會以 0
為初始值。此外,如果對更新前不存在的屬性 (但項目存在) 使用 ADD
增減數值來更新項目,則 DynamoDB 會以 0
為初始值。例如,您使用 ADD
將 +3
新增至更新前不存在的屬性。DynamoDB 使用 0
為初始值,而且更新後的值為 3
。
如需使用此操作的詳細資訊,請參閱 使用 DynamoDB 中的項目和屬性。
請求
語法
// This header is abbreviated. // For a sample of a complete header, see DynamoDB 低階 API. POST / HTTP/1.1 x-amz-target: DynamoDB_20111205.UpdateItem content-type: application/x-amz-json-1.0 {"TableName":"Table1", "Key": {"HashKeyElement":{"S":"AttributeValue1"}, "RangeKeyElement":{"N":"AttributeValue2"}}, "AttributeUpdates":{"AttributeName3":{"Value":{"S":"AttributeValue3_New"},"Action":"PUT"}}, "Expected":{"AttributeName3":{"Value":{"S":"AttributeValue3_Current"}}}, "ReturnValues":"ReturnValuesConstant" }
名稱 | 描述 | 必要 |
---|---|---|
TableName
|
包含要更新項目的資料表的名稱。 類型:字串 |
是 |
Key
|
定義項目的主索引鍵。如需主索引鍵的詳細資訊,請參閱 主索引鍵。 類型: |
是 |
AttributeUpdates |
新值的屬性名稱映射以及更新動作。屬性名稱指定要修改的屬性,且不能包含任何主索引鍵屬性。 類型:屬性名稱映射、值,以及屬性更新動作。 |
|
AttributeUpdates :Action |
指定如何執行更新。可能值: 類型:字串 預設: |
否 |
Expected
|
指定條件式更新的屬性。 類型:屬性名稱映射。 |
否 |
Expected:AttributeName
|
條件式放置的屬性的名稱。 類型:字串 |
否 |
Expected:AttributeName: ExpectedAttributeValue |
使用此參數來指定屬性名稱值組的值是否已經存在。 如果該項目的 Color (顏色) 屬性尚未存在,則下列 JSON 符號會更新項目:
下列 JSON 符號會在更新項目之前檢查名為 Color (顏色) 的屬性是否具有現有值 Yellow (黃色):
根據預設,如果使用
注意如果指定 |
否 |
ReturnValues
|
如果想在以 類型:字串 |
否 |
回應
語法
下列語法範例假設請求指定 ALL_OLD
的 ReturnValues
參數,反之則回應只有 ConsumedCapacityUnits
元素。
HTTP/1.1 200 x-amzn-RequestId: 8966d095-71e9-11e0-a498-71d736f27375 content-type: application/x-amz-json-1.0 content-length: 140 {"Attributes":{ "AttributeName1":{"S":"AttributeValue1"}, "AttributeName2":{"S":"AttributeValue2"}, "AttributeName3":{"S":"AttributeValue3"}, "AttributeName5":{"B":"dmFsdWU="} }, "ConsumedCapacityUnits":1 }
名稱 | 描述 |
---|---|
Attributes
|
屬性名稱值組映射,但僅限於 類型:屬性名稱值組映射。 |
ConsumedCapacityUnits |
操作所使用的寫入容量單位數目。此值顯示套用至佈建輸送量的數字。如需詳細資訊,請參閱 DynamoDB 佈建容量模式。 類型:數字 |
特殊錯誤
錯誤 | 描述 |
---|---|
ConditionalCheckFailedException
|
條件式檢查失敗。屬性 ("+ name +") 值為 ("+ value +"),但預期為 ("+ expValue +") |
ResourceNotFoundExceptions
|
找不到指定的項目或屬性。 |
範例
如需使用 AWS SDK 的範例,請參閱使用 DynamoDB 中的項目和屬性。
請求範例
// This header is abbreviated. For a sample of a complete header, see DynamoDB 低階 API. POST / HTTP/1.1 x-amz-target: DynamoDB_20111205.UpdateItem content-type: application/x-amz-json-1.0 {"TableName":"comp5", "Key": {"HashKeyElement":{"S":"Julie"},"RangeKeyElement":{"N":"1307654350"}}, "AttributeUpdates": {"status":{"Value":{"S":"online"}, "Action":"PUT"}}, "Expected":{"status":{"Value":{"S":"offline"}}}, "ReturnValues":"ALL_NEW" }
回應範例
HTTP/1.1 200 OK x-amzn-RequestId: 5IMHO7F01Q9P7Q6QMKMMI3R3QRVV4KQNSO5AEMVJF66Q9ASUAAJG content-type: application/x-amz-json-1.0 content-length: 121 Date: Fri, 26 Aug 2011 21:05:00 GMT {"Attributes": {"friends":{"SS":["Lynda, Aaron"]}, "status":{"S":"online"}, "time":{"N":"1307654350"}, "user":{"S":"Julie"}}, "ConsumedCapacityUnits":1 }