Expected (legacy) - Amazon DynamoDB

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)

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. Per informazioni specifiche sul nuovo parametro che sostituisce questo, consulta usa ConditionExpressioninvece..

Il parametro condizionale legacy Expected è un blocco condizionale per un'operazione UpdateItem. Expected è una mappa di coppie attributo/condizione. 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'ANDoperatore. È 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 tra valori di stringa con valori maggiori di, uguali o minori di si basano su Unicode con UTF codifica binaria -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.

      CONTAINSè supportato per gli elenchi: quando si valuta "a CONTAINS b«," a "può essere un elenco; tuttavia," b "non può essere un insieme, una mappa o un elenco.

    • 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_ CONTAINS è supportato per gli elenchi: quando si valuta "a NOT CONTAINS b«," a "può essere un elenco; tuttavia," b "non può essere un insieme, una mappa o un elenco.

    • 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 elementiAttributeValue 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 ConditionExpressioninvece — Esempio

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