簡體   English   中英

Dynamodb的PutItem使用條件更新

[英]Dynamodb's PutItem update using condition

我試圖完成到dynamodb的批處理更新。 我正在嘗試確定是否可以在批處理更新中添加一個條件,該條件表明如果其中一個列等於某個值(其值為true),則應更新項目,否則請更新。

您可以在單個項目更新上放置條件表達式,以在條件不滿足時使更新失敗。 但是,它不會使整個批次失敗,僅會使單個更新失敗。 批處理更新響應將包含有關哪些更新成功和哪些失敗的信息

您應該查看DynamoDB事務 它具有您要查找的條件表達式,並且全部或不批量更新。

我猜您在尋找條件表達式,請檢查此鏈接

您應該使用UpdateItem,它可以編輯現有項目的屬性,或者如果尚不存在新項目,則將其添加到表中。

例如從aws doc復制,

下面的示例執行UpdateItem操作。 它試圖將產品的價格降低75,但如果當前價格低於500,條件表達式將阻止更新:

aws dynamodb update-item \
    --table-name ProductCatalog \
    --key '{"Id": {"N": "456"}}' \
    --update-expression "SET Price = Price - :discount" \
    --condition-expression "Price > :limit" \
    --expression-attribute-values file://values.json

表ProductCatalog就是這樣,

{
    "Id": { "N": "456"},
    "Price": {"N": "650"},
    "ProductCategory": {"S": "Sporting Goods"}
}

和values.json喜歡這個,

{
    ":discount": { "N": "75"},
    ":limit": {"N": "500"}
}

在這里,最初的價格是650,如果價格大於500,您將使用條件表達式嘗試將價格降低75。因此,前兩次運行update-item應該會起作用,而在第三次運行時,因為價格已降低到500(即(不大於500)運行將失敗。

通過將條件表達式用於過濾器表達式,可以做到這一點。 但是請不要這樣做。

DynamoDB是鍵值NoSQL。 這意味着您只能通過按鍵來獲取正確的數據。 如果您執行過濾器,它將遍歷大量記錄並降低應用程序速度。 您可以查看本文: 關於DynamoDB的5件事

因此,當對數據進行增刪改查時,建議與密鑰進行交互的方法是通過密鑰。 我可以將其轉換為偽代碼,如下所示:

GET: SELECT * FROM THE TABLE WHERE Id ='SampleId'
UPDATE: UPDATE THE ITEM WHERE id = 'SampleId'
DELETE: DELETETHE ITEM WHERE id = 'SampleId'

為了滿足您的需求,您需要使用彈性搜索來獲取正確的項目,然后您可以通過密鑰更新數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM