[英]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.