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.
Expressions de mise à jour
L'opération UpdateItem
met à jour un élément existant, ou ajoute un nouvel élément à la table si celui-ci n'existe pas déjà. Vous devez fournir la clé de l'élément que vous souhaitez mettre à jour. Vous devez également fournir une expression de mise à jour, ce qui indique les attributs que vous voulez modifier et les valeurs que vous souhaitez leur attribuer.
Une expression de mise à jour spécifie comment l'opération UpdateItem
doit modifier les attributs d'un élément, par exemple, en définissant une valeur scalaire ou en supprimant des éléments d'une liste ou d'un mappage.
Voici un récapitulatif de la syntaxe des expressions de mise à jour.
update-expression ::= [ SET
action
[,action
] ... ] [ REMOVEaction
[,action
] ...] [ ADDaction
[,action
] ... ] [ DELETEaction
[,action
] ...]
Une expression de mise à jour se compose d'une ou plusieurs clauses. Chaque clause commence par un mot-clé SET
, REMOVE
, ADD
ou DELETE
. Vous pouvez inclure une de ces clauses dans une expression de mise à jour, dans n'importe quel ordre. Toutefois, chaque mot-clé d'action peut n'apparaître qu'une seule fois.
Chaque clause contient une ou plusieurs actions, séparées par des virgules. Chaque action représente une modification de données.
Les exemples de cette section sont basés sur l'élément ProductCatalog
présenté dans Expressions de projections.
Les rubriques ci-dessous couvrent différents cas d'utilisation de l'action SET
.
Rubriques
SET— modification ou ajout d'attributs d'article
Utilisez l'action SET
dans une expression de mise à jour pour ajouter un ou plusieurs attributs à un élément. Si l'un de ces attributs existe déjà, il est remplacé par les nouvelles valeurs. Si vous souhaitez éviter de remplacer un attribut existant, vous pouvez l'utiliser SET
avec leif_not_exists function
. La fonction if_not_exists
est spécifique de l'action SET
et peut être utilisée uniquement dans une expression de mise à jour.
Lorsque vous utilisez SET
pour mettre à jour un élément de la liste, le contenu de cet élément est remplacé par les nouvelles données que vous spécifiez. Si l'élément n'existe pas déjà, SET
ajoute le nouvel élément à la fin de la liste.
Si vous ajoutez plusieurs éléments dans une seule opération SET
, les éléments sont triés dans l'ordre par numéro d'élément.
Vous pouvez également utiliser SET
pour ajouter ou soustraire un attribut qui est de type Number
. Afin d'effectuer plusieurs actions SET
, séparez-les par des virgules.
Dans le récapitulatif de la syntaxe suivante :
-
Le
path
élément est le chemin du document vers l'élément. -
Un
operand
un élément peut être soit le chemin d'un document vers un élément, soit une fonction.
set-action ::=
path
= value value ::=operand
|operand
'+'operand
|operand
'-'operand
operand ::=path
| function function ::=if_not_exists (path)
Si l'élément ne contient aucun attribut sur le chemin spécifié, il est if_not_exists
évalué àvalue
. Dans le cas contraire, il est évalué à. path
L'opération PutItem
suivante crée un exemple d'élément auquel nous ferons référence dans les exemples.
aws dynamodb put-item \ --table-name ProductCatalog \ --item file://item.json
Les arguments de la fonction --item
sont stockés dans le fichier item.json
. Dans un souci de simplicité, seuls quelques attributs sont utilisés.
{ "Id": {"N": "789"}, "ProductCategory": {"S": "Home Improvement"}, "Price": {"N": "52"}, "InStock": {"BOOL": true}, "Brand": {"S": "Acme"} }
Rubriques
Modification d'attributs
Exemple
Met à jour les attributs ProductCategory
et Price
.
aws dynamodb update-item \ --table-name ProductCatalog \ --key '{"Id":{"N":"789"}}' \ --update-expression "SET ProductCategory = :c, Price = :p" \ --expression-attribute-values file://values.json \ --return-values ALL_NEW
Les arguments de la fonction --expression-attribute-values
sont stockés dans le fichier values.json
.
{ ":c": { "S": "Hardware" }, ":p": { "N": "60" } }
Note
Dans l'opération UpdateItem
, --return-values ALL_NEW
amène DynamoDB à renvoyer l'élément tel qu'il apparaît après la mise à jour.
Ajouter des listes et des maps
Exemple
Ajoutez une nouvelle liste et une nouvelle carte.
aws dynamodb update-item \ --table-name ProductCatalog \ --key '{"Id":{"N":"789"}}' \ --update-expression "SET RelatedItems = :ri, ProductReviews = :pr" \ --expression-attribute-values file://values.json \ --return-values ALL_NEW
Les arguments de la fonction --expression-attribute-values
sont stockés dans le fichier values.json
.
{ ":ri": { "L": [ { "S": "Hammer" } ] }, ":pr": { "M": { "FiveStar": { "L": [ { "S": "Best product ever!" } ] } } } }
Ajout d'éléments à une liste
Exemple
Ajoutez un nouvel attribut à la liste RelatedItems
. (N'oubliez pas que les éléments de liste sont en base zéro, donc [0] représente le premier élément dans la liste, [1] représente le deuxième et ainsi de suite.)
aws dynamodb update-item \ --table-name ProductCatalog \ --key '{"Id":{"N":"789"}}' \ --update-expression "SET RelatedItems[1] = :ri" \ --expression-attribute-values file://values.json \ --return-values ALL_NEW
Les arguments de la fonction --expression-attribute-values
sont stockés dans le fichier values.json
.
{ ":ri": { "S": "Nails" } }
Note
Lorsque vous utilisez SET
pour mettre à jour un élément de la liste, le contenu de cet élément est remplacé par les nouvelles données que vous spécifiez. Si l'élément n'existe pas déjà, SET
ajoute le nouvel élément à la fin de la liste.
Si vous ajoutez plusieurs éléments dans une seule opération SET
, les éléments sont triés dans l'ordre par numéro d'élément.
Ajouter des attributs de map imbriqués
Exemple
Ajoutez certains attributs de carte imbriqués.
aws dynamodb update-item \ --table-name ProductCatalog \ --key '{"Id":{"N":"789"}}' \ --update-expression "SET #pr.#5star[1] = :r5, #pr.#3star = :r3" \ --expression-attribute-names file://names.json \ --expression-attribute-values file://values.json \ --return-values ALL_NEW
Les arguments de la fonction --expression-attribute-names
sont stockés dans le fichier names.json
.
{ "#pr": "ProductReviews", "#5star": "FiveStar", "#3star": "ThreeStar" }
Les arguments de la fonction --expression-attribute-values
sont stockés dans le fichier values.json
.
{ ":r5": { "S": "Very happy with my purchase" }, ":r3": { "L": [ { "S": "Just OK - not that great" } ] } }
Incrémentation et décrémentation d'attributs numériques
Vous pouvez ajouter ou soustraire depuis un attribut numérique existant. Pour ce faire, utilisez les opérateurs +
(plus) et -
(moins).
Exemple
Réduit Price
d'un élément.
aws dynamodb update-item \ --table-name ProductCatalog \ --key '{"Id":{"N":"789"}}' \ --update-expression "SET Price = Price - :p" \ --expression-attribute-values '{":p": {"N":"15"}}' \ --return-values ALL_NEW
Afin d'accroître le Price
, utilisez l'opérateur +
dans l'expression de mise à jour.
Ajout d'éléments à une liste
Vous pouvez ajouter des éléments à la fin d'une liste. Pour ce faire, utilisez SET
avec la fonction list_append
. (Le nom de fonction est sensible à la casse.) La fonction list_append
est spécifique de l'action SET
et peut être utilisée uniquement dans une expression de mise à jour. La syntaxe est la suivante.
-
list_append (
list1
,list2
)
La fonction prend deux listes en entrée et ajoute tous les éléments de
à list2
.list1
Exemple
Dans Ajout d'éléments à une liste, vous créez la liste RelatedItems
et la complétez avec deux éléments : Hammer
et Nails
. Nous allons maintenant ajouter deux autres éléments à la fin de RelatedItems
.
aws dynamodb update-item \ --table-name ProductCatalog \ --key '{"Id":{"N":"789"}}' \ --update-expression "SET #ri = list_append(#ri, :vals)" \ --expression-attribute-names '{"#ri": "RelatedItems"}' \ --expression-attribute-values file://values.json \ --return-values ALL_NEW
Les arguments de la fonction --expression-attribute-values
sont stockés dans le fichier values.json
.
{ ":vals": { "L": [ { "S": "Screwdriver" }, {"S": "Hacksaw" } ] } }
Enfin, nous allons ajouter un autre élément au début de RelatedItems
. Pour ce faire, permutez l'ordre des éléments list_append
. (N'oubliez pas que la fonction list_append
prend deux listes en entrée, puis ajoute la seconde liste à la première.)
aws dynamodb update-item \ --table-name ProductCatalog \ --key '{"Id":{"N":"789"}}' \ --update-expression "SET #ri = list_append(:vals, #ri)" \ --expression-attribute-names '{"#ri": "RelatedItems"}' \ --expression-attribute-values '{":vals": {"L": [ { "S": "Chisel" }]}}' \ --return-values ALL_NEW
L'attribut RelatedItems
résultant contient maintenant cinq éléments, dans l'ordre suivant : Chisel
, Hammer
, Nails
, Screwdriver
, Hacksaw
.
Empêcher le remplacement d'un attribut existant
Exemple
Définissez l'attribut Price
d'un élément, mais uniquement si l'élément ne possède pas déjà un attribut Price
. (Si Price
existe déjà, il ne se passe rien.)
aws dynamodb update-item \ --table-name ProductCatalog \ --key '{"Id":{"N":"789"}}' \ --update-expression "SET Price = if_not_exists(Price, :p)" \ --expression-attribute-values '{":p": {"N": "100"}}' \ --return-values ALL_NEW
REMOVE— suppression d'attributs d'un élément
Utilisez l'action REMOVE
dans une expression de mise à jour pour supprimer un ou plusieurs attributs d'un élément dans Amazon DynamoDB. Afin d'effectuer plusieurs actions REMOVE
, séparez-les par des virgules.
Ce qui suit est un résumé de la syntaxe pour REMOVE
dans une expression de mise à jour. Le seul opérande est le chemin d'accès au document pour l'attribut que vous souhaitez supprimer.
remove-action ::=
path
Exemple
Supprimer des attributs d'un élément. (Si les attributs n'existent pas, il ne se passe rien.)
aws dynamodb update-item \ --table-name ProductCatalog \ --key '{"Id":{"N":"789"}}' \ --update-expression "REMOVE Brand, InStock, QuantityOnHand" \ --return-values ALL_NEW
Suppression d'éléments d'une liste
Vous pouvez utiliser REMOVE
pour supprimer des éléments d'une liste.
Exemple
Dans Ajout d'éléments à une liste, nous avons modifié un attribut de liste (RelatedItems
) de sorte qu'il contienne les cinq éléments suivants :
-
[0]
—Chisel
-
[1]
—Hammer
-
[2]
—Nails
-
[3]
—Screwdriver
-
[4]
—Hacksaw
L'exemple suivant AWS Command Line Interface (AWS CLI) supprime Hammer
et Nails
de la liste.
aws dynamodb update-item \ --table-name ProductCatalog \ --key '{"Id":{"N":"789"}}' \ --update-expression "REMOVE RelatedItems[1], RelatedItems[2]" \ --return-values ALL_NEW
Après la suppression de Hammer
et Nails
, les éléments restants sont déplacés. La liste contient désormais les éléments suivants :
-
[0]
—Chisel
-
[1]
—Screwdriver
-
[2]
—Hacksaw
ADD— mise à jour des numéros et des ensembles
Note
En général, nous recommandons d'utiliser SET
plutôt que ADD
.
Utilisez l'action ADD
dans une expression de mise à jour pour ajouter un nouvel attribut et ses valeurs à un élément.
Si l'attribut existe déjà, alors le comportement de ADD
dépend du type de données de l'attribut :
-
Si l'attribut est un nombre et que la valeur que vous ajoutez est également un nombre, la valeur est ajoutée mathématiquement à l'attribut existant. (Si la valeur est un nombre négatif, alors elle est soustraite de l'attribut existant.)
-
Si l'attribut est un ensemble, et que la valeur que vous ajoutez est également un ensemble, alors la valeur est ajoutée à l'ensemble existant.
Note
L'action ADD
prend uniquement en charge les données de type Number et Set.
Afin d'effectuer plusieurs actions ADD
, séparez-les par des virgules.
Dans le récapitulatif de la syntaxe suivante :
-
Le
path
élément est le chemin du document vers un attribut. L'attribut doit être unNumber
ou un type de données défini. -
Le
value
élément est un nombre que vous souhaitez ajouter à l'attribut (pour les types deNumber
données) ou un ensemble à ajouter à l'attribut (pour les types d'ensembles).
add-action ::=
path
value
Les rubriques ci-dessous couvrent différents cas d'utilisation de l'action ADD
.
Ajout d'un nombre
Supposons que l'attribut QuantityOnHand
n'existe pas. L' AWS CLI exemple suivant définit QuantityOnHand
la valeur 5.
aws dynamodb update-item \ --table-name ProductCatalog \ --key '{"Id":{"N":"789"}}' \ --update-expression "ADD QuantityOnHand :q" \ --expression-attribute-values '{":q": {"N": "5"}}' \ --return-values ALL_NEW
Maintenant que QuantityOnHand
existe, vous pouvez exécuter à nouveau l'exemple pour incrémenter QuantityOnHand
de 5 chaque fois.
Ajout d'éléments à un ensemble
Supposons que l'attribut Color
n'existe pas. L'exemple AWS CLI
suivant définit Color
sur un ensemble de chaîne avec deux éléments.
aws dynamodb update-item \ --table-name ProductCatalog \ --key '{"Id":{"N":"789"}}' \ --update-expression "ADD Color :c" \ --expression-attribute-values '{":c": {"SS":["Orange", "Purple"]}}' \ --return-values ALL_NEW
Maintenant que Color
existe, vous pouvez lui ajouter de nouveaux éléments.
aws dynamodb update-item \ --table-name ProductCatalog \ --key '{"Id":{"N":"789"}}' \ --update-expression "ADD Color :c" \ --expression-attribute-values '{":c": {"SS":["Yellow", "Green", "Blue"]}}' \ --return-values ALL_NEW
DELETE— suppression d'éléments d'un ensemble
Important
L'action DELETE
prend uniquement en charge les types de données Set
.
Utilisez l'action DELETE
dans une expression de mise à jour pour supprimer un ou plusieurs éléments d'un ensemble. Afin d'effectuer plusieurs actions DELETE
, séparez-les par des virgules.
Dans le récapitulatif de la syntaxe suivante :
-
Le
path
élément est le chemin du document vers un attribut. L'attribut doit être un type de données défini. -
Le
subset
est un ou plusieurs éléments que vous souhaitez supprimerpath
. Vous devez spécifiersubset
en tant que type d'ensemble.
delete-action ::=
path
subset
Exemple
Dans Ajout d'éléments à un ensemble, vous créez l'ensemble de chaînes Color
. Cet exemple supprime certains des éléments de cet ensemble.
aws dynamodb update-item \ --table-name ProductCatalog \ --key '{"Id":{"N":"789"}}' \ --update-expression "DELETE Color :p" \ --expression-attribute-values '{":p": {"SS": ["Yellow", "Purple"]}}' \ --return-values ALL_NEW
Utilisation de plusieurs expressions de mise à jour
Vous pouvez utiliser plusieurs expressions de mise à jour dans une seule instruction.
Si vous souhaitez modifier la valeur d'un attribut et en supprimer complètement un autre, vous pouvez utiliser une action SET et une REMOVE action dans une seule instruction. Cette opération réduirait la valeur de Price
à 15 tout en supprimant l'attribut InStock
de l'élément.
aws dynamodb update-item \ --table-name ProductCatalog \ --key '{"Id":{"N":"789"}}' \ --update-expression "SET Price = Price - :p REMOVE InStock" \ --expression-attribute-values '{":p": {"N":"15"}}' \ --return-values ALL_NEW
Si vous souhaitez ajouter des éléments à une liste tout en modifiant la valeur d'un autre attribut, vous pouvez utiliser deux SET actions dans une seule instruction. Cette opération ajouterait « Nails » à l'attribut RelatedItems
list et définirait également la valeur de Price
sur 21.
aws dynamodb update-item \ --table-name ProductCatalog \ --key '{"Id":{"N":"789"}}' \ --update-expression "SET RelatedItems[1] = :newValue, Price = :newPrice" \ --expression-attribute-values '{":newValue": {"S":"Nails"}, ":newPrice": {"N":"21"}}' \ --return-values ALL_NEW