

# Expressões de condição e filtro, operadores e funções no DynamoDB
<a name="Expressions.OperatorsAndFunctions"></a>

Para manipular dados em uma tabela do DynamoDB, use as operações `PutItem`, `UpdateItem` e `DeleteItem`. Para essas operações de manipulação de dados, é possível especificar uma expressão de condição para determinar quais itens devem ser modificados. Se a expressão de condição for avaliada como verdadeira, a operação terá êxito. Caso contrário, haverá falha na operação.

Esta seção aborda as funções e palavras-chave integradas para escrever expressões de filtro e expressões de condição no Amazon DynamoDB. Para obter informações mais detalhadas sobre funções e programação com o DynamoDB, consulte [Programação com o DynamoDB e os AWS SDKs](Programming.md) e a [Referência da API do DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/).

**Topics**
+ [Sintaxe para expressões de filtro e de condição](#Expressions.OperatorsAndFunctions.Syntax)
+ [Fazer comparações](#Expressions.OperatorsAndFunctions.Comparators)
+ [Funções](#Expressions.OperatorsAndFunctions.Functions)
+ [Avaliações lógicas](#Expressions.OperatorsAndFunctions.LogicalEvaluations)
+ [Parênteses](#Expressions.OperatorsAndFunctions.Parentheses)
+ [Precedência em condições](#Expressions.OperatorsAndFunctions.Precedence)

## Sintaxe para expressões de filtro e de condição
<a name="Expressions.OperatorsAndFunctions.Syntax"></a>

No seguinte resumo de sintaxe, um {{operando}} pode ser o seguinte: 
+ Um nome de atributo de nível superior, como `Id`, `Title`, `Description` ou `ProductCategory`
+ Um caminho de documento que faz referência a um atributo aninhado

```
condition-expression ::=
      {{operand}} comparator {{operand}}
    | {{operand}} BETWEEN {{operand}} AND {{operand}}
    | {{operand}} IN ( {{operand}} (',' {{operand}} (, ...) ))
    | function
    | {{condition}} AND {{condition}}
    | {{condition}} OR {{condition}}
    | NOT {{condition}}
    | ( {{condition}} )

comparator ::=
    =
    | <>
    | <
    | <=
    | >
    | >=

function ::=
    attribute_exists ({{path}})
    | attribute_not_exists ({{path}})
    | attribute_type ({{path}}, {{type}})
    | begins_with ({{path}}, {{substr}})
    | contains ({{path}}, {{operand}})
    | size ({{path}})
```

## Fazer comparações
<a name="Expressions.OperatorsAndFunctions.Comparators"></a>

Use esses comparadores para comparar um operando com um único valor:
+ `{{a}} = {{b}}`: verdadeiro se {{a}} for igual a {{b}}.
+ `{{a}} <> {{b}}`: verdadeiro se {{a}} não for igual a {{b}}.
+ `{{a}} < {{b}}`: verdadeiro se {{a}} for menor que {{b}}.
+ `{{a}} <= {{b}}`: verdadeiro se {{a}} for menor que ou igual a {{b}}.
+ `{{a}} > {{b}}`: verdadeiro se {{a}} for maior que {{b}}.
+ `{{a}} >= {{b}}`: verdadeiro se {{a}} for maior ou igual a {{b}}.

Use as palavras-chave `BETWEEN` e `IN` para comparar um operando com um intervalo de valores ou com uma lista enumerada de valores:
+ `{{a}} BETWEEN {{b}} AND {{c}}`: verdadeiro se {{a}} for maior ou igual a {{b}} e menor ou igual a {{c}}.
+ `{{a}} IN ({{b}}, {{c}}, {{d}}) `: verdadeiro se {{a}} for igual a qualquer um dos valores na lista; por exemplo, {{b}}, {{c}} ou {{d}}. A lista pode conter até 100 valores, separados por vírgulas.

## Funções
<a name="Expressions.OperatorsAndFunctions.Functions"></a>

Use as funções a seguir para determinar se um atributo existe em um item ou para avaliar o valor de um atributo. Esses nomes de funções diferenciam maiúsculas de minúsculas. Para um atributo aninhado, você deve fornecer o caminho completo do documento.


****  

| Função | Descrição | 
| --- | --- | 
| `attribute_exists ({{path}})` | True se o item contiver o atributo especificado por `path`.<br />Exemplo: verificar se um item na tabela `Product` tem uma imagem de vista lateral.[See the AWS documentation website for more details](http://docs.aws.amazon.com/pt_br/amazondynamodb/latest/developerguide/Expressions.OperatorsAndFunctions.html) | 
| `attribute_not_exists ({{path}})` | True se o atributo especificado por `path` não existir no item.<br />Exemplo: verificar se um item tem um atributo `Manufacturer`.[See the AWS documentation website for more details](http://docs.aws.amazon.com/pt_br/amazondynamodb/latest/developerguide/Expressions.OperatorsAndFunctions.html) | 
| `attribute_type ({{path}}, {{type}})` | True se o atributo no caminho especificado for de um tipo de dados específico. O parâmetro `type` deve ser um dos seguintes:[See the AWS documentation website for more details](http://docs.aws.amazon.com/pt_br/amazondynamodb/latest/developerguide/Expressions.OperatorsAndFunctions.html)<br />Você deve usar um valor de atributo de expressão para o parâmetro `type`.<br />Exemplo: verificar se o atributo `QuantityOnHand` é do tipo Lista. Neste exemplo, `:v_sub` é um espaço reservado para a string `L`.[See the AWS documentation website for more details](http://docs.aws.amazon.com/pt_br/amazondynamodb/latest/developerguide/Expressions.OperatorsAndFunctions.html)<br />Você deve usar um valor de atributo de expressão para o parâmetro `type`.  | 
| `begins_with ({{path}}, {{substr}})` | Verdadeiro se o atributo especificado por `path` começar com uma substring específica.<br />Exemplo: verificar se os primeiros caracteres do URL da imagem de vista frontal são `http://`.[See the AWS documentation website for more details](http://docs.aws.amazon.com/pt_br/amazondynamodb/latest/developerguide/Expressions.OperatorsAndFunctions.html)<br />O valor do atributo de expressão `:v_sub` é um espaço reservado para `http://`. | 
| `contains ({{path}}, {{operand}})` | Verdadeiro se o atributo especificado por `path` for um dos seguintes:[See the AWS documentation website for more details](http://docs.aws.amazon.com/pt_br/amazondynamodb/latest/developerguide/Expressions.OperatorsAndFunctions.html)<br />Se o atributo especificado por `path` for `String`, o `operand` deve ser `String`. Se o atributo especificado por `path` for um `Set`, o `operand` deverá ser o tipo de elemento do conjunto.<br />O caminho e o operando devem ser distintos. Isto é, `contains (a, a)` retorna um erro.<br />Exemplo: verificar se o atributo `Brand` contém a substring `Company`.[See the AWS documentation website for more details](http://docs.aws.amazon.com/pt_br/amazondynamodb/latest/developerguide/Expressions.OperatorsAndFunctions.html)<br />O valor do atributo de expressão `:v_sub` é um espaço reservado para `Company`.<br />Exemplo: verificar se o produto está disponível em vermelho.[See the AWS documentation website for more details](http://docs.aws.amazon.com/pt_br/amazondynamodb/latest/developerguide/Expressions.OperatorsAndFunctions.html)<br />O valor do atributo de expressão `:v_sub` é um espaço reservado para `Red`. | 
| `size ({{path}})` | Retorna um número que representa o tamanho de um atributo. Veja a seguir os tipos de dados válidos para uso com `size`.<br /><br />Se o atributo for do tipo `String`, `size` retornará o comprimento da string.<br />Exemplo: verificar se a string `Brand` é menor ou igual a 20 caracteres. O valor do atributo de expressão `:v_sub` é um espaço reservado para `20`.[See the AWS documentation website for more details](http://docs.aws.amazon.com/pt_br/amazondynamodb/latest/developerguide/Expressions.OperatorsAndFunctions.html)<br /><br />Se o atributo for do tipo `Binary`, `size` retornará o número de bytes no valor do atributo.<br />Exemplo: suponha que o item de `ProductCatalog` tenha um atributo binário chamado `VideoClip`, que contém um curto vídeo sobre o produto em uso. A seguinte expressão verifica se `VideoClip` excede 64.000 bytes. O valor do atributo de expressão `:v_sub` é um espaço reservado para `64000`. [See the AWS documentation website for more details](http://docs.aws.amazon.com/pt_br/amazondynamodb/latest/developerguide/Expressions.OperatorsAndFunctions.html)<br /><br />Se o atributo for de um tipo de dados de `Set`, `size` retornará o número de elementos no conjunto. <br />Exemplo: verificar se o produto está disponível em mais de uma cor. O valor do atributo de expressão `:v_sub` é um espaço reservado para `1`.[See the AWS documentation website for more details](http://docs.aws.amazon.com/pt_br/amazondynamodb/latest/developerguide/Expressions.OperatorsAndFunctions.html)<br /><br />Se o atributo for do tipo `List` ou `Map`, `size` retornará o número de elementos filho.<br />Exemplo: verificar se o número de revisões `OneStar` excedeu um determinado limite. O valor do atributo de expressão `:v_sub` é um espaço reservado para `3`.[See the AWS documentation website for more details](http://docs.aws.amazon.com/pt_br/amazondynamodb/latest/developerguide/Expressions.OperatorsAndFunctions.html) | 

## Avaliações lógicas
<a name="Expressions.OperatorsAndFunctions.LogicalEvaluations"></a>

Use as palavras-chave `AND`, `OR` e `NOT` para executar avaliações lógicas. Na lista a seguir, {{a}} e {{b}} representam condições a serem avaliadas.
+ `{{a}} AND {{b}}`: verdadeiro se {{a}} e {{b}} forem ambos verdadeiros.
+ `{{a}} OR {{b}}`: verdadeiro se {{a}} ou {{b}} ou ambos forem verdadeiros.
+ `NOT {{a}}`: verdadeiro se {{a}} for falso. Falso se {{a}} for verdadeiro.

Veja a seguir um exemplo de código de AND em uma operação.

`dynamodb-local (*)> select * from exprtest where a > 3 and a < 5;`

## Parênteses
<a name="Expressions.OperatorsAndFunctions.Parentheses"></a>

Use parênteses para alterar a precedência de uma avaliação lógica. Por exemplo, suponha que as condições {{a}} e {{b}} sejam verdadeiras e que a condição {{c}} seja falsa. As expressões a seguir são avaliadas como verdadeiras:
+ `{{a}} OR {{b}} AND {{c}}`

No entanto, se você colocar uma condição entre parênteses, ela será avaliada primeiro. Por exemplo, o seguinte é avaliado como falso:
+  `({{a}} OR {{b}}) AND {{c}}`

**nota**  
Você pode aninhar parênteses em uma expressão. Os componentes mais internos são avaliados primeiro.

Veja a seguir um exemplo de código com parênteses em uma avaliação lógica.

`dynamodb-local (*)> select * from exprtest where attribute_type(b, string) or ( a = 5 and c = “coffee”);`

## Precedência em condições
<a name="Expressions.OperatorsAndFunctions.Precedence"></a>

 O DynamoDB avalia as condições da esquerda para a direita usando as seguintes regras de precedência:
+ `= <> < <= > >=`
+ `IN`
+ `BETWEEN`
+ `attribute_exists attribute_not_exists begins_with contains`
+ Parênteses
+ `NOT`
+ `AND`
+ `OR`