As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
As expressões de condição da transação estão disponíveis em modelos de mapeamento de solicitação de todos os quatro tipos de operações em TransactWriteItems
, ou seja, PutItem
, DeleteItem
, UpdateItem
e ConditionCheck
.
Em PutItem
, DeleteItem
e UpdateItem
, a expressão de condição da transação é opcional. Em ConditionCheck
, a expressão de condição da transação é necessária.
Exemplo 1
O documento de mapeamento transacional DeleteItem
a seguir não tem uma expressão de condição. Como resultado, ele exclui o item no DynamoDB.
{
"version": "2018-05-29",
"operation": "TransactWriteItems",
"transactItems": [
{
"table": "posts",
"operation": "DeleteItem",
"key": {
"id": { "S" : "1" }
}
}
]
}
Exemplo 2
O documento de mapeamento transacional DeleteItem
a seguir possui uma expressão de condição da transação que permite que a operação seja bem-sucedida apenas se o autor dessa postagem for igual a determinado nome.
{
"version": "2018-05-29",
"operation": "TransactWriteItems",
"transactItems": [
{
"table": "posts",
"operation": "DeleteItem",
"key": {
"id": { "S" : "1" }
}
"condition": {
"expression": "author = :author",
"expressionValues": {
":author": { "S" : "Chunyan" }
}
}
}
]
}
Se a verificação de condição falhar, causará TransactionCanceledException
e os detalhes de erro serão retornados em $ctx.result.cancellationReasons
. Observe que, por padrão, o item antigo no DynamoDB que fez a verificação da condição falhar será retornado em $ctx.result.cancellationReasons
.
Especificação de uma condição
Os documentos de mapeamento da solicitação PutItem
, UpdateItem
e DeleteItem
permitem que uma seção condition
opcional seja especificada. Se omitida, nenhuma verificação de condição é feita. Se especificada, a condição deve ser verdadeira para que a operação seja bem-sucedida. A ConditionCheck
deve ter uma seção condition
a ser especificada. A condição deve ser verdadeira para que toda a transação seja bem-sucedida.
A seção condition
tem a seguinte estrutura:
"condition": {
"expression": "someExpression",
"expressionNames": {
"#foo": "foo"
},
"expressionValues": {
":bar": ... typed value
},
"returnValuesOnConditionCheckFailure": false
}
Os campos a seguir especificam a condição:
-
expression
-
A própria expressão de atualização. Para obter mais informações sobre como escrever expressões condicionais, consulte a documentação do ConditionExpressions DynamoDB. Esse campo deve ser especificado.
-
expressionNames
-
As substituições para espaços reservados de nome do atributo da expressão, na forma de pares de chave/valor. A chave corresponde a um espaço reservado de nome usado na expressão e o valor deve ser uma string que corresponde ao nome do atributo do item no DynamoDB. Esse campo é opcional e deve ser preenchido apenas por substituições para espaços reservados de nome do atributo da expressão usados na expressão.
-
expressionValues
-
As substituições para espaços reservados de valor do atributo da expressão, na forma de pares chave-valor. A chave corresponde a um espaço reservado de valor usado na expressão e o valor deve ser um valor digitado. Para obter mais informações sobre como especificar um "valor digitado", consulte Sistema de tipo (mapeamento de solicitação). Isso deve ser especificado. Esse campo é opcional e deve ser preenchido apenas por substituições para espaços reservados de valor do atributo da expressão usados na expressão.
-
returnValuesOnConditionCheckFailure
-
Especifique se deseja recuperar o item no DynamoDB quando houver falha na verificação de condição. O item recuperado estará em
$ctx.result.cancellationReasons[$index].item
, onde$index
é o índice do item de solicitação cuja verificação de condição falhou. Esse valor padrão é verdadeiro.