本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
交易條件表達式
交易條件表達式可用於 中所有四種操作類型的請求TransactWriteItems
,即 、PutItem
DeleteItem
、 UpdateItem
和 ConditionCheck
。
對於 PutItem
、 DeleteItem
和 UpdateItem
,交易條件表達式是選用的。對於 ConditionCheck
,交易條件表達式是必要的。
範例 1
下列交易DeleteItem
函數請求處理常式沒有條件表達式。因此,它會刪除 DynamoDB 中的項目。
import { util } from '@aws-appsync/utils'; export function request(ctx) { const { postId } = ctx.args; return { operation: 'TransactWriteItems', transactItems: [ { table: 'posts', operation: 'DeleteItem', key: util.dynamodb.toMapValues({ postId }), } ], }; }
範例 2
下列交易DeleteItem
函數請求處理常式確實具有交易條件表達式,只有在該文章的作者等於特定名稱時,才會允許操作成功。
import { util } from '@aws-appsync/utils'; export function request(ctx) { const { postId, authorName} = ctx.args; return { operation: 'TransactWriteItems', transactItems: [ { table: 'posts', operation: 'DeleteItem', key: util.dynamodb.toMapValues({ postId }), condition: util.transform.toDynamoDBConditionExpression({ authorName: { eq: authorName }, }), } ], }; }
如果條件檢查失敗,會導致 TransactionCanceledException
,並且會在 ctx.result.cancellationReasons
中傳回錯誤詳細資料。請注意,根據預設,在 DynamoDB 中造成條件檢查失敗的舊項目會在 中傳回ctx.result.cancellationReasons
。
指定條件
PutItem
、 UpdateItem
和 DeleteItem
請求物件都允許指定選用condition
區段。若省略,則不會有條件檢查。若指定,條件必須為 true,操作才會成功。ConditionCheck
必須有待指定的 condition
區段。條件必須為 true,整個交易才會成功。
condition
區段的結構如下:
type TransactConditionCheckExpression = { expression: string; expressionNames?: { [key: string]: string }; expressionValues?: { [key: string]: string }; returnValuesOnConditionCheckFailure: boolean; };
下列欄位指定條件:
-
expression
-
更新表達式本身。如需如何編寫條件表達式的詳細資訊,請參閱 DynamoDB ConditionExpressions 文件。必須指定此欄位。
-
expressionNames
-
表達式屬性名稱預留位置的替代,形式為索引鍵值對。索引鍵對應至表達式中使用的名稱預留位置,且值必須是對應於 DynamoDB 中項目屬性名稱的字串。此欄位為選用的,應只能填入於表達式中所用表達式屬性名稱預留位置的替代。
-
expressionValues
-
表達式屬性值預留位置的替代,形式為索引值對。鍵對應用於表達式的值預留位置,值必須是類型值。如需如何指定「輸入值」的詳細資訊,請參閱類型系統 (請求映射)。此必須指定。此欄位為選用的,應只能填入用於表達式中表達式屬性值預留位置的替代。
-
returnValuesOnConditionCheckFailure
-
指定條件檢查失敗時是否要擷取 DynamoDB 中的項目。擷取的項目將位於
ctx.result.cancellationReasons[<index>].item
中,其中<index>
是條件檢查失敗之請求項目的索引。此值預設為 true。