Expected (hérité) - Amazon DynamoDB

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Expected (hérité)

Note

Dans la mesure du possible, nous vous recommandons d'utiliser les nouveaux paramètres d'expression plutôt que ces paramètres hérités. Pour de plus amples informations, veuillez consulter Utilisation d'expressions dans DynamoDB. Pour obtenir des informations précises sur le nouveau paramètre qui remplace celui-ci, utilisez ConditionExpressionplutôt..

Le paramètre conditionnel hérité Expected est un bloc conditionnel pour une opération UpdateItem. Expected est un mappage de paires attribut/condition. Chaque élément du mappage se compose d'un nom d'attribut, d'un opérateur de comparaison et d'une ou plusieurs valeurs. DynamoDB compare l'attribut avec la ou les valeurs que vous avez fournies, en utilisant l'opérateur de comparaison. Pour chaque élément Expected, le résultat de l'évaluation est vrai (true) ou faux (false).

Si vous spécifiez plusieurs éléments dans le mappage Expected, par défaut, le résultat de toutes les conditions doit être true. En d'autres termes, les conditions sont combinées à l'aide d'ANDun opérateur. Vous pouvez également utiliser le paramètre ConditionalOperator pour dissocier les conditions à l'aide de l'opérateur logique OR (OU). Dans ce cas, au moins une des conditions doit avoir la valeur vrai, plutôt que toutes.

Si le mappage Expected a la valeur true, l'opération conditionnelle réussit. Autrement, elle échoue.

Le mappage Expected contient les éléments suivants :

  • AttributeValueList - Une ou plusieurs valeurs à évaluer par rapport à l'attribut fourni. Le nombre de valeurs dans la liste dépend de l'opérateur ComparisonOperator utilisé.

    Pour le type Nombre, les comparaisons de valeurs sont numériques.

    Les comparaisons de valeurs de chaîne supérieures, égales ou inférieures à sont basées sur le codage Unicode binaire UTF -8. Par exemple, a est supérieur à A, et a est supérieur à B.

    Pour le type Binaire, DynamoDB traite chaque octet des données binaires comme non signé lors de la comparaison de valeurs binaires.

  • ComparisonOperator - Comparateur pour l'évaluation d'attributs dans la AttributeValueList. Lors de la comparaison, DynamoDB utilise des lectures fortement cohérentes.

    Les opérateurs de comparaison pris en charge sont les suivants :

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

    Voici la description de chaque opérateur de comparaison.

    • EQ : égal. L'opérateur EQ est pris en charge pour tous les types de données, y compris les listes et les mappages.

      AttributeValueList ne peut contenir qu'un seul élément AttributeValue de type Chaîne, Nombre, Binaire, Ensemble de chaînes, Ensemble de nombres ou Ensemble de binaires. Si une liste contient un élément AttributeValue d'un type différent de celui spécifié dans la demande, la valeur ne correspond pas. Par exemple, {"S":"6"} n'est pas égal à {"N":"6"}. De même, {"N":"6"} n'est pas égal à {"NS":["6", "2", "1"]}.

    • NE : pas égal. L'opérateur NE est pris en charge pour tous les types de données, y compris les listes et les mappages.

      AttributeValueList ne peut contenir qu'un seul élément AttributeValue de type Chaîne, Nombre, Binaire, Ensemble de chaînes, Ensemble de nombres ou Ensemble de binaires. Si une liste contient un élément AttributeValue d'un type différent de celui spécifié dans la demande, la valeur ne correspond pas. Par exemple, {"S":"6"} n'est pas égal à {"N":"6"}. De même, {"N":"6"} n'est pas égal à {"NS":["6", "2", "1"]}.

    • LE : inférieur ou égal.

      AttributeValueList ne peut contenir qu'un seul élément AttributeValue de type Chaîne, Nombre ou Binaire (pas Ensemble). Si une liste contient un élément AttributeValue d'un type différent de celui spécifié dans la demande, la valeur ne correspond pas. Par exemple, {"S":"6"} n'est pas égal à {"N":"6"}. De même, {"N":"6"} n'est pas comparable à {"NS":["6", "2", "1"]}.

    • LT : inférieur.

      AttributeValueList ne peut contenir qu'un seul élément AttributeValue de type Chaîne, Nombre ou Binaire (pas Ensemble). Si une liste contient un élément AttributeValue d'un type différent de celui spécifié dans la demande, la valeur ne correspond pas. Par exemple, {"S":"6"} n'est pas égal à {"N":"6"}. De même, {"N":"6"} ne se compare pas à {"NS":["6", "2", "1"]}.

    • GE : supérieur ou égal.

      AttributeValueList ne peut contenir qu'un seul élément AttributeValue de type Chaîne, Nombre ou Binaire (pas Ensemble). Si une liste contient un élément AttributeValue d'un type différent de celui spécifié dans la demande, la valeur ne correspond pas. Par exemple, {"S":"6"} n'est pas égal à {"N":"6"}. De même, {"N":"6"} ne se compare pas à {"NS":["6", "2", "1"]}.

    • GT : supérieur.

      AttributeValueList ne peut contenir qu'un seul élément AttributeValue de type Chaîne, Nombre ou Binaire (pas Ensemble). Si une liste contient un élément AttributeValue d'un type différent de celui spécifié dans la demande, la valeur ne correspond pas. Par exemple, {"S":"6"} n'est pas égal à {"N":"6"}. De même, {"N":"6"} n'est pas comparable à {"NS":["6", "2", "1"]}.

    • NOT_NULL : l'attribut existe. L'opérateur NOT_NULL est pris en charge pour tous les types de données, y compris les listes et les mappages.

      Note

      Cet opérateur teste l'existence d'un attribut, pas son type de données. Si le type de données de l'attribut « a » est nul, et si vous l'évaluez à l'aide de l'opérateur NOT_NULL, le résultat est un booléen de valeur true. Ce résultat est dû au fait que l'attribut « a » existe. Son type de données n'est pas pertinent pour l'opérateur de comparaison NOT_NULL.

    • NULL : l'attribut n'existe pas. L'opérateur NULL est pris en charge pour tous les types de données, y compris les listes et les mappages.

      Note

      Cet opérateur teste la non-existence d'un attribut, pas son type de données. Si le type de données de l'attribut « a » est nul, et si vous l'évaluez à l'aide de l'opérateur NULL, le résultat est un booléen de valeur false. Cela est dû au fait que l'attribut « a » existe. Son type de données n'est pas pertinent pour l'opérateur de comparaison NULL.

    • CONTAINS : vérifie la présence d'une sous-séquence ou d'une valeur dans un ensemble.

      AttributeValueList ne peut contenir qu'un seul élément AttributeValue de type Chaîne, Nombre ou Binaire (pas Ensemble). Si l'attribut cible de la comparaison est de type Chaîne, l'opérateur vérifie la présence d'une sous-chaîne correspondante. Si l'attribut cible de la comparaison est de type Binaire, l'opérateur vérifie la présence d'une sous-séquence de la cible correspondant à l'entrée. Si l'attribut cible de la comparaison est un ensemble (« SS », « NS » ou « BS »), l'opérateur évalue true s'il trouve une correspondance exacte avec un membre de l'ensemble.

      CONTAINSest pris en charge pour les listes : lors de l'évaluation de a CONTAINS b « a », « » peut être une liste ; toutefois, b « » ne peut pas être un ensemble, une carte ou une liste.

    • NOT_CONTAINS : vérifie l'absence d'une sous-séquence ou d'une valeur dans un ensemble.

      AttributeValueList ne peut contenir qu'un seul élément AttributeValue de type Chaîne, Nombre ou Binaire (pas Ensemble). Si l'attribut cible de la comparaison est de type Chaîne, l'opérateur vérifie l'absence de sous-chaîne correspondante. Si l'attribut cible de la comparaison est de type Binaire, l'opérateur vérifie l'absence d'une sous-séquence de la cible correspondant à l'entrée. Si l'attribut cible de la comparaison est un ensemble (« SS », « NS » ou « BS »), l'opérateur évalue true s'il ne trouve pas does not de correspondance exacte avec un membre de l'ensemble.

      NOT_ CONTAINS est pris en charge pour les listes : lors de l'évaluation de a NOT CONTAINS b « a », « » peut être une liste ; toutefois, b « » ne peut pas être un ensemble, une carte ou une liste.

    • BEGINS_WITH : vérifie la présence d'un préfixe.

      AttributeValueList ne peut contenir qu'un seul élément AttributeValue de type Chaîne ou Binaire (pas Nombre ou Ensemble). L'attribut cible de la comparaison doit être de type Chaîne ou Binaire (pas Nombre ou Ensemble).

    • IN : vérifie la présence d'éléments correspondants dans deux ensembles.

      AttributeValueList peut contenir un ou plusieurs éléments AttributeValue de type Chaîne, Nombre ou Binaire (pas Ensemble). Ces attributs sont comparés à un attribut de type d'ensemble existant d'un élément. Si des éléments de l'ensemble en entrée sont présents dans l'attribut de l'élément, l'expression prend la valeur true.

    • BETWEEN : supérieur ou égal à la première valeur, et inférieur ou égal à la deuxième.

      AttributeValueList doit contenir deux éléments AttributeValue du même type, Chaîne, Nombre ou Binaire (pas Ensemble). Un attribut cible correspond si la valeur cible est supérieure ou égale au premier élément, et inférieure ou égale au deuxième. Si une liste contient un élément AttributeValue d'un type différent de celui spécifié dans la demande, la valeur ne correspond pas. Par exemple, {"S":"6"} ne se compare pas à {"N":"6"}. De même, {"N":"6"} ne se compare pas à {"NS":["6", "2", "1"]}.

Les paramètres suivants peuvent être utilisés au lieu de AttributeValueList et ComparisonOperator :

  • Value - Valeur que DynamoDB doit comparer avec un attribut.

  • Exists - Valeur booléenne qui amène DynamoDB à évaluer la valeur avant de tenter l'opération conditionnelle :

    • Si Exists a la valeur true, DynamoDB vérifie si cette valeur d'attribut existe déjà dans la table. Si elle y figure, la condition a la valeur true. Sinon, la condition a la valeur false.

    • Si Exists a la valeur false, DynamoDB suppose que la valeur d'attribut n'existe not dans la table. Si la valeur n'existe effectivement pas, l'hypothèse est valide et le résultat de la condition est true. Si la valeur est trouvée malgré l'hypothèse qu'elle n'existe pas, le résultat de la condition est false.

    Notez que la valeur par défaut pour Exists est true.

Les paramètres Value et Exists sont incompatibles avec AttributeValueList et ComparisonOperator. Notez que, si vous utilisez les deux ensembles de paramètres à la fois, DynamoDB renvoie une exception ValidationException.

Note

Ce paramètre ne prend pas en charge les attributs de type Liste ou Mappage.

Utiliser à ConditionExpressionla place — Exemple

Supposons que vous souhaitiez modifier un élément dans la table Music, mais seulement si le résultat d'une certaine condition est true. Vous pouvez utiliser une UpdateItem requête avec un Expected paramètre, comme dans cet AWS CLI exemple :

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

Vous pouvez utiliser ConditionExpression à la place :

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