

# Expected (herdado)
<a name="LegacyConditionalParameters.Expected"></a>

**nota**  
Sugerimos que você use os novos parâmetros de expressão, em vez desses parâmetros herdados. Para obter mais informações, consulte [Usar expressões no DynamoDB](Expressions.md). Para obter informações específicas sobre o novo parâmetro que substitui este, [Use *ConditionExpression* em vez disso.](#Expected.instead). 

O parâmetro condicional herdado `Expected` é um bloco condicional para uma operação `UpdateItem`. `Expected` é um mapa de pares de atributo/condição. Cada elemento do mapa consiste em um nome de atributo, um operador de comparação e um ou mais valores. O DynamoDB compara o atributo com os valores que você forneceu usando o operador de comparação. Para cada elemento `Expected`, o resultado da avaliação é verdadeiro ou falso.

Se você especificar mais de um elemento no mapa `Expected`, por padrão, todas as condições deverão ser avaliadas como verdadeiras. Em outras palavras, as condições são combinadas usando o operador `AND`. (Em vez disso, você pode usar o parâmetro `ConditionalOperator` processar as condições com o operador OR. Se fizer isso, pelo menos uma das condições deverá ser avaliada como true, em vez de todas elas.)

Se o mapa `Expected` for avaliado como verdadeiro, a operação condicional será bem-sucedida; caso contrário, há uma falha.

 `Expected` contém o seguinte:
+  `AttributeValueList`: um ou mais valores para avaliar em relação ao atributo fornecido. O número de valores na lista depende do `ComparisonOperator` que está sendo usado.

  Para o tipo Number, as comparações de valor são numéricas.

  As comparações de valor String para "maior que", "igual a" ou "menor que" são baseadas em Unicode com codificação UTF-8 binária. Por exemplo, `a` é maior que `A`, e `a` é maior que `B`.

  Para o tipo Binary, o DynamoDB trata cada byte de dados binários como não assinados ao comparar valores binários.
+  `ComparisonOperator` - um comparador para avaliar atributos na `AttributeValueList`. Ao executar a comparação, o DynamoDB usa leituras fortemente consistentes.

  Os seguintes operadores de comparação estão disponíveis:

   `EQ | NE | LE | LT | GE | GT | NOT_NULL | NULL | CONTAINS | NOT_CONTAINS | BEGINS_WITH | IN | BETWEEN` 

  Veja a seguir as descrições de cada operador de comparação.
  +  `EQ`: igual. `EQ` é aceito por todos os tipos de dados, incluindo listas e mapas.

     `AttributeValueList` pode conter apenas um elemento `AttributeValue` do tipo String, Number, Binary, String Set, Number Set ou Binary Set. Se um item contém um elemento `AttributeValue` de um tipo diferente do fornecido na solicitação, os valores não coincidem. Por exemplo, `{"S":"6"}` não é igual a `{"N":"6"}`. Além disso, `{"N":"6"}` não é igual a `{"NS":["6", "2", "1"]}`.
  +  `NE`: não é igual. `NE` é aceito por todos os tipos de dados, incluindo listas e mapas.

     `AttributeValueList` pode conter apenas um `AttributeValue` do tipo String, Number, Binary, String Set, Number Set ou Binary Set. Se um item contém um `AttributeValue` de um tipo diferente do fornecido na solicitação, os valores não coincidem. Por exemplo, `{"S":"6"}` não é igual a `{"N":"6"}`. Além disso, `{"N":"6"}` não é igual a `{"NS":["6", "2", "1"]}`.
  +  `LE` : Menor ou igual a. 

     `AttributeValueList` pode conter apenas um elemento `AttributeValue` do tipo String, Number ou Binary (não um tipo Set). Se um item contém um elemento `AttributeValue` de um tipo diferente do fornecido na solicitação, os valores não coincidem. Por exemplo, `{"S":"6"}` não é igual a `{"N":"6"}`. Além disso, `{"N":"6"}` não se compara a `{"NS":["6", "2", "1"]}`.
  +  `LT` : Menor que. 

     `AttributeValueList` pode conter apenas um `AttributeValue` do tipo String, Number ou Binary (não um tipo Set). Se um item contém um elemento `AttributeValue` de um tipo diferente do fornecido na solicitação, os valores não coincidem. Por exemplo, `{"S":"6"}` não é igual a `{"N":"6"}`. Além disso, `{"N":"6"}` não se compara a `{"NS":["6", "2", "1"]}`.
  +  `GE` : Maior ou igual a. 

     `AttributeValueList` pode conter apenas um elemento `AttributeValue` do tipo String, Number ou Binary (não um tipo Set). Se um item contém um elemento `AttributeValue` de um tipo diferente do fornecido na solicitação, os valores não coincidem. Por exemplo, `{"S":"6"}` não é igual a `{"N":"6"}`. Além disso, `{"N":"6"}` não se compara a `{"NS":["6", "2", "1"]}`.
  +  `GT` : Maior que. 

     `AttributeValueList` pode conter apenas um elemento `AttributeValue` do tipo String, Number ou Binary (não um tipo Set). Se um item contém um elemento `AttributeValue` de um tipo diferente do fornecido na solicitação, os valores não coincidem. Por exemplo, `{"S":"6"}` não é igual a `{"N":"6"}`. Além disso, `{"N":"6"}` não se compara a `{"NS":["6", "2", "1"]}`.
  +  `NOT_NULL`: o atributo existe. `NOT_NULL` é aceito por todos os tipos de dados, incluindo listas e mapas.
**nota**  
Este operador testa a existência de um atributo, não o tipo de dados. Se o tipo de dados do atributo "`a`" for nulo e você avaliá-lo usando `NOT_NULL`, o resultado será um Boolean `true`. Isso acontece porque o atributo "`a`" existe; o tipo de dados não é relevante para o operador de comparação `NOT_NULL`.
  +  `NULL`: o atributo não existe. `NULL` é aceito por todos os tipos de dados, incluindo listas e mapas.
**nota**  
Este operador testa a não existência de um atributo, e não seu tipo de dados. Se o tipo de dados do atributo "`a`" for nulo e você avaliá-lo usando `NULL`, o resultado será um Boolean `false`. Isso acontece porque o atributo "`a`" existe; o tipo de dados não é relevante para o operador de comparação `NULL`.
  +  `CONTAINS` : verifica uma subsequência ou valor em um conjunto.

     `AttributeValueList` pode conter apenas um elemento `AttributeValue` do tipo String, Number ou Binary (não um tipo Set). Se o atributo de destino da comparação for do tipo String, o operador procurará uma substring correspondente. Se o atributo de destino da comparação for do tipo Binary, o operador procurará uma subsequência do destino que corresponda à entrada. Se o atributo de destino da comparação for um conjunto ("`SS`", "`NS`" ou "`BS`"), o operador será avaliado como verdadeiro, se ele encontrar uma correspondência exata com qualquer membro do conjunto.

    CONTAINS tem suporte em listas: ao avaliar "`a CONTAINS b`", " `a`" pode ser uma lista. No entanto, "`b`" não pode ser um conjunto, um mapa ou uma lista.
  +  `NOT_CONTAINS` : verifica a ausência de uma subsequência ou a ausência de um valor em um conjunto.

     `AttributeValueList` pode conter apenas um elemento `AttributeValue` do tipo String, Number ou Binary (não um tipo Set). Se o atributo de destino da comparação for String, o operador verificará a ausência de uma substring correspondente. Se o atributo de destino da comparação for Binary, o operador verificará a ausência de uma subsequência do destino que corresponda à entrada. Se o atributo de destino da comparação for um conjunto ("`SS`", "`NS`" ou "`BS`"), o operador será avaliado como verdadeiro se ele `does not` encontrar uma correspondência exata com qualquer membro do conjunto.

    NOT\$1CONTAINS tem suporte em listas: ao avaliar "`a NOT CONTAINS b`", " `a`" pode ser uma lista. No entanto, "`b`" não pode ser um conjunto, um mapa ou uma lista.
  +  `BEGINS_WITH` : procura um prefixo. 

     `AttributeValueList` pode conter apenas um elemento `AttributeValue` do tipo String ou Binary (não um tipo Number ou Set). O atributo de destino da comparação deve ser do tipo String ou Binary (e não Number ou um tipo de conjunto).
  +  `IN` : procura elementos correspondentes dentro de dois conjuntos.

     `AttributeValueList` pode conter um ou mais elementos `AttributeValue` do tipo String, Number ou Binary (não um tipo Set). Esses atributos são comparados com um atributo do tipo Set existente de um item. Se quaisquer elementos do conjunto de entradas estiverem presentes no atributo do item, a expressão será avaliada como verdadeira.
  +  `BETWEEN` : maior ou igual ao primeiro valor e menor ou igual ao segundo valor. 

     `AttributeValueList` deve conter dois elementos `AttributeValue` do mesmo tipo, seja String, Number ou Binary (não um tipo Set). Um atributo de destino corresponderá se o valor de destino for maior que ou igual ao primeiro elemento e menor que ou igual ao segundo elemento. Se um item contém um elemento `AttributeValue` de um tipo diferente do fornecido na solicitação, os valores não coincidem. Por exemplo, `{"S":"6"}` não se compara a `{"N":"6"}`. Além disso, `{"N":"6"}` não se compara a `{"NS":["6", "2", "1"]}` 

Os parâmetros a seguir podem ser usados em vez de `AttributeValueList` e `ComparisonOperator`:
+  `Value` - um valor para o DynamoDB comparar com um atributo.
+  `Exists` - um valor Booleano que faz com que o DynamoDB avalie o valor antes de tentar a operação condicional:
  + Se `Exists` for `true`, o DynamoDB verificará se esse valor de atributo já existe na tabela. Se ele for encontrado, a condição será avaliada como verdadeira; caso contrário, a condição será avaliada como falsa.
  + Se `Exists` for `false`, o DynamoDB assumirá que o valor do atributo `not` existe na tabela. Se, na verdade, o valor não existir, a suposição será válida e a condição será avaliada como verdadeira. Se o valor for encontrado, apesar da suposição de que ele não existe, a condição será avaliada como falsa.

  Observe que o valor padrão para `Exists` é `true`.

Os parâmetros `Value` e `Exists` são incompatíveis com `AttributeValueList` e `ComparisonOperator`. Observe que se você usar os dois conjuntos de parâmetros de uma só vez, o DynamoDB retornará uma exceção `ValidationException`.

**nota**  
Este parâmetro não tem suporte a atributos do tipo List ou Map.

## Use *ConditionExpression* em vez disso: exemplo
<a name="Expected.instead"></a>

Suponha que você quisesse modificar um item na tabela *Music*, mas somente se uma determinada condição fosse verdadeira. Você poderia usar uma solicitação `UpdateItem` com um parâmetro `Expected`, como neste exemplo da AWS CLI:

```
aws dynamodb update-item \
    --table-name Music \
    --key '{
        "Artist": {"S":"No One You Know"},
        "SongTitle": {"S":"Call Me Today"} 
    }' \
    --attribute-updates '{
        "Price": {
            "Action": "PUT", 
            "Value": {"N":"1.98"}
        }
    }' \
    --expected '{
        "Price": {
            "ComparisonOperator": "LE", 
            "AttributeValueList": [ {"N":"2.00"} ]
        }
    }'
```

Você pode usar `ConditionExpression` em vez disso:

```
aws dynamodb update-item \
    --table-name Music \
    --key '{
        "Artist": {"S":"No One You Know"},
        "SongTitle": {"S":"Call Me Today"} 
    }' \
    --update-expression 'SET Price = :p1' \
    --condition-expression 'Price <= :p2' \
    --expression-attribute-values '{
        ":p1": {"N":"1.98"},
        ":p2": {"N":"2.00"}
    }'
```