

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

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

**Nota**  
Consigliamo di utilizzare i nuovi parametri di espressione piuttosto che i parametri precedenti, se possibile. Per ulteriori informazioni, consulta [Utilizzo di espressioni in DynamoDB](Expressions.md). Per informazioni specifiche sul nuovo parametro che sostituisce questo, consulta [usa *ConditionExpression*invece.](#Expected.instead). 

Il parametro condizionale legacy `Expected` è un blocco condizionale per un'operazione. `UpdateItem` `Expected`è una mappa di coppie. attribute/condition Ogni elemento della mappa è costituito da un nome di attributo, un operatore di confronto e uno o più valori. DynamoDB confronta l'attributo con i valori forniti tramite l'operatore di confronto. Per ogni elemento `Expected`, il risultato della valutazione è true o false.

Se si specifica più di un elemento nella mappa `Expected`, allora, per impostazione predefinita, tutte le condizioni devono restituire true. In altre parole, le condizioni vengono combinate utilizzando l’operatore `AND`. È possibile utilizzare il parametro `ConditionalOperator` per applicare l'operatore OR alle condizioni. In questo caso, almeno una delle condizioni deve restituire true, se non tutte.

Se la mappa `Expected` restituisce true, l'operazione condizionale ha esito positivo, altrimenti ha esito negativo.

 `Expected` contiene i seguenti dati:
+  `AttributeValueList`: uno o più valori da valutare rispetto all'attributo fornito. Il numero di valori nell'elenco dipende dal `ComparisonOperator` utilizzato.

  Per il tipo Number, i confronti dei valori sono numerici.

  I confronti di valori String per maggiore di, uguale o minore di sono basati su Unicode con codifica binaria UTF-8. Ad esempio, `a` è maggiore di `A` e `a` è maggiore di `B`.

  Per il tipo Binary, quando confronta i valori binari DynamoDB tratta ogni byte dei dati binari come non firmato.
+  `ComparisonOperator`: un comparatore per valutare gli attributi in `AttributeValueList`. Quando si esegue il confronto, DynamoDB utilizza letture fortemente consistenti.

  Sono disponibili i seguenti operatori di confronto:

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

  Di seguito sono riportate le descrizioni di ogni operatore di confronto.
  +  `EQ`: uguale a. `EQ` è supportato per tutti i tipi di dati, inclusi elenchi e mappe.

     `AttributeValueList` può contenere solo un elemento `AttributeValue` di tipo String, Number, Binary, String Set, Number Set o Binary Set. Se un elemento contiene un elemento `AttributeValue` di un tipo diverso da quello specificato nella richiesta, il valore non corrisponde. Ad esempio, `{"S":"6"}` non è uguale a `{"N":"6"}`. Inoltre, `{"N":"6"}` non è uguale a `{"NS":["6", "2", "1"]}`.
  +  `NE`: diverso da. `NE` è supportato per tutti i tipi di dati, inclusi elenchi e mappe.

     `AttributeValueList` può contenere solo un elemento `AttributeValue` di tipo String, Number, Binary, String Set, Number Set o Binary Set. Se un elemento contiene un `AttributeValue` di un tipo diverso da quello specificato nella richiesta, il valore non corrisponde. Ad esempio, `{"S":"6"}` non è uguale a `{"N":"6"}`. Inoltre, `{"N":"6"}` non è uguale a `{"NS":["6", "2", "1"]}`.
  +  `LE`: minore o uguale a. 

     `AttributeValueList` può contenere solo un elemento `AttributeValue` di tipo String, Number o Binary (non un tipo Set). Se un elemento contiene un elemento `AttributeValue` di un tipo diverso da quello specificato nella richiesta, il valore non corrisponde. Ad esempio, `{"S":"6"}` non è uguale a `{"N":"6"}`. Inoltre, `{"N":"6"}` non si confronta con `{"NS":["6", "2", "1"]}`.
  +  `LT`: minore di. 

     `AttributeValueList` può contenere solo un `AttributeValue` di tipo String, Number o Binary (non un tipo Set). Se un elemento contiene un elemento `AttributeValue` di un tipo diverso da quello specificato nella richiesta, il valore non corrisponde. Ad esempio, `{"S":"6"}` non è uguale a `{"N":"6"}`. Inoltre, `{"N":"6"}` non si confronta con `{"NS":["6", "2", "1"]}`.
  +  `GE`: maggiore o uguale a. 

     `AttributeValueList` può contenere solo un elemento `AttributeValue` di tipo String, Number o Binary (non un tipo Set). Se un elemento contiene un elemento `AttributeValue` di un tipo diverso da quello specificato nella richiesta, il valore non corrisponde. Ad esempio, `{"S":"6"}` non è uguale a `{"N":"6"}`. Inoltre, `{"N":"6"}` non si confronta con `{"NS":["6", "2", "1"]}`.
  +  `GT`: maggiore di. 

     `AttributeValueList` può contenere solo un elemento `AttributeValue` di tipo String, Number o Binary (non un tipo Set). Se un elemento contiene un elemento `AttributeValue` di un tipo diverso da quello specificato nella richiesta, il valore non corrisponde. Ad esempio, `{"S":"6"}` non è uguale a `{"N":"6"}`. Inoltre, `{"N":"6"}` non si confronta con `{"NS":["6", "2", "1"]}`.
  +  `NOT_NULL`: l'attributo esiste. `NOT_NULL` è supportato per tutti i tipi di dati, inclusi elenchi e mappe.
**Nota**  
Questo operatore verifica l'esistenza di un attributo, non il suo tipo di dati. Se il tipo di dati dell'attributo "`a`" è nullo e lo si valuta usando `NOT_NULL`, il risultato è un `true` booleano. Questo risultato è perché l'attributo "`a`" esiste; il suo tipo di dati non è rilevante per l'operatore di confronto `NOT_NULL`.
  +  `NULL`: l'attributo non esiste. `NULL` è supportato per tutti i tipi di dati, inclusi elenchi e mappe.
**Nota**  
Questo operatore verifica la non esistenza di un attributo, non il relativo tipo di dati. Se il tipo di dati dell'attributo "`a`" è nullo e lo si valuta usando `NULL`, il risultato è un `false` booleano. Questo è perché l'attributo "`a`" esiste; il suo tipo di dati non è rilevante per l'operatore di confronto `NULL`.
  +  `CONTAINS`: controlla la presenza di una sottosequenza o di un valore in un set.

     `AttributeValueList` può contenere solo un elemento `AttributeValue` di tipo String, Number o Binary (non un tipo Set). Se l'attributo di destinazione del confronto è di tipo String, l'operatore verifica la presenza di una corrispondenza di sottostringa. Se l'attributo di destinazione del confronto è di tipo Binary, l'operatore cerca una sottosequenza della destinazione che corrisponde all'input. Se l'attributo di destinazione del confronto è un set "`SS`", "`NS`" o "`BS`"), l'operatore restituisce true se trova una corrispondenza esatta con qualsiasi membro del set.

    CONTAINES è supportato per gli elenchi: quando si valuta "`a CONTAINS b`", "`a`" può essere un List; tuttavia "`b`" non può essere set, Map o List.
  +  `NOT_CONTAINS`: controlla l'assenza di una sottosequenza o l'assenza di un valore in un set.

     `AttributeValueList` può contenere solo un elemento `AttributeValue` di tipo String, Number o Binary (non un tipo Set). Se l'attributo di destinazione del confronto è String, l'operatore verifica l'assenza di una corrispondenza di sottostringa. Se l'attributo di destinazione del confronto è Binary, l'operatore verifica l'assenza di una sottosequenza della destinazione che corrisponde all'input. Se l'attributo di destinazione del confronto è un set ("`SS`", "`NS`" o "`BS`"), l'operatore restituisce true se `does not` trova una corrispondenza esatta con qualsiasi membro del set.

    NOT\$1CONTAINS è supportato per gli elenchi: quando si valuta "`a NOT CONTAINS b`", "`a`" può essere un List; tuttavia "`b`" non può essere set, Map o List.
  +  `BEGINS_WITH`: controlla la presenza di un prefisso. 

     `AttributeValueList` può contenere solo un `AttributeValue` di tipo String o Binary (non un tipo Number o Set). L'attributo di destinazione del confronto deve essere String o Binary (non un tipo Number o Set).
  +  `IN`: verifica la presenza di elementi corrispondenti all'interno di due set.

     `AttributeValueList` può contenere uno o più elementi `AttributeValue` di tipo String, Number o Binary (non un tipo Set). Questi attributi vengono confrontati con un attributo di tipo Set esistente di un elemento. Se nell'attributo dell'elemento sono presenti elementi del set di input, l'espressione restituisce true.
  +  `BETWEEN`: maggiore di o uguale a primo valore e minore di o uguale a secondo valore. 

     `AttributeValueList` deve contenere due elementi`AttributeValue` dello stesso tipo, String, Number o Binary (non un tipo Set). Un attributo di destinazione corrisponde se il valore di destinazione è maggiore o uguale al primo elemento e minore o uguale al secondo elemento. Se un elemento contiene un elemento `AttributeValue` di un tipo diverso da quello specificato nella richiesta, il valore non corrisponde. Ad esempio, `{"S":"6"}` non si confronta con `{"N":"6"}`. Inoltre, `{"N":"6"}` non si confronta con `{"NS":["6", "2", "1"]}` 

I seguenti parametri possono essere usati al posto di `AttributeValueList` e `ComparisonOperator`:
+  `Value`: un valore per DynamoDB da confrontare con un attributo.
+  `Exists`: un valore booleano che fa sì che DynamoDB valuti il valore prima di provare l'operazione condizionale:
  + Se `Exists` è `true`, DynamoDB controllerà se tale valore dell'attributo esiste già nella tabella. Se viene trovato, allora la condizione restituisce true, altrimenti restituisce false.
  + Se `Exists` è `false`, DynamoDB presuppone che il valore dell'attributo `not` esiste nella tabella. Se davvero il valore non esiste, allora l'ipotesi è valida e la condizione restituisce true. Se il valore viene trovato nonostante il presupposto che non esiste, la condizione restituisce false.

  Si noti che il valore predefinito per `Exists` è `true`.

I parametri `Value` e `Exists` sono incompatibili con `AttributeValueList` e `ComparisonOperator`. Si noti che se si utilizzano entrambi i set di parametri contemporaneamente, DynamoDB restituirà una eccezione `ValidationException`.

**Nota**  
Questo parametro non supporta gli attributi di tipo List o Map.

## Usa *ConditionExpression*invece — Esempio
<a name="Expected.instead"></a>

Si supponga di voler modificare un elemento nella tabella *Music*, ma solo se una certa condizione è vera. Puoi usare una `UpdateItem` richiesta con un `Expected` parametro, come in questo AWS CLI esempio:

```
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"} ]
        }
    }'
```

Puoi invece utilizzare `ConditionExpression`:

```
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"}
    }'
```