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à.
Utilizzo delle espressioni di aggiornamento in DynamoDB
L'operazione UpdateItem
aggiorna una voce esistente o aggiunge una nuova voce alla tabella, se non è già presente. È necessario fornire la chiave dell'elemento che intendi aggiornare. È necessario fornire inoltre un'espressione di aggiornamento che indica gli attributi che intendi modificare e i valori che intendi assegnargli.
Una espressione di aggiornamento specifica come UpdateItem
modificherà gli attributi di un elemento, ad esempio impostando un valore scalare o rimuovendo elementi da un elenco o da una mappa.
Di seguito è riportato un riepilogo della sintassi delle espressioni di aggiornamento.
update-expression ::= [ SET
action
[,action
] ... ] [ REMOVEaction
[,action
] ...] [ ADDaction
[,action
] ... ] [ DELETEaction
[,action
] ...]
Un'espressione di aggiornamento comprende una o più clausole. Ogni clausola inizia con una parola chiave SET
, REMOVE
, ADD
o DELETE
. Puoi includere qualsiasi di queste clausole in un'espressione di aggiornamento, in qualsiasi ordine. Tuttavia, ciascuna parola chiave dell'operazione può comparire una sola volta.
All'interno di ogni clausola esistono una o più operazioni separate da virgole. Ciascuna operazione rappresenta una modifica di dati.
Gli esempi in questa sezione si basano sull'elemento ProductCatalog
illustrato in Utilizzo delle espressioni di proiezione in DynamoDB.
Gli argomenti seguenti illustrano diversi casi d'uso dell'operazione SET
.
Argomenti
SET— modifica o aggiunta degli attributi degli articoli
Utilizza l'operazione SET
in un'espressione di aggiornamento per aggiungere uno o più attributi a un elemento. Se alcuni di questi attributi esistono già, vengono sovrascritti dai nuovi valori. Se si desidera evitare di sovrascrivere un attributo esistente, è possibile utilizzare SET
con. if_not_exists function
La funzione if_not_exists
è specifica dell'operazione SET
e può essere utilizzata solo in un'espressione di aggiornamento.
Quando utilizzi SET
per aggiornare un elemento dell'elenco, i contenuti dell'elemento vengono sostituiti con i nuovi dati specificati. Se l'elemento non esiste ancora, SET
aggiunge il nuovo elemento alla fine dell'elenco.
Se aggiungi più elementi in un'unica operazione SET
, gli elementi verranno ordinati per numero di elemento.
Puoi inoltre utilizzare SET
per aggiungere o sottrarre un attributo di tipo Number
. Per eseguire più operazioni SET
, separarle con virgole.
Nel riepilogo della sintassi seguente:
-
Il
path
elemento è il percorso del documento verso l'elemento. -
Un
operand
l'elemento può essere il percorso del documento verso un elemento o una funzione.
set-action ::=
path
= value value ::=operand
|operand
'+'operand
|operand
'-'operand
operand ::=path
| function function ::=if_not_exists (path)
Se l'elemento non contiene un attributo nel percorso specificato, if_not_exists
restituisce avalue
. Altrimenti, restituisce. path
L'operazione PutItem
seguente crea un elemento di esempio a cui gli esempi fanno riferimento.
aws dynamodb put-item \ --table-name ProductCatalog \ --item file://item.json
Gli argomenti per --item
sono memorizzati nel file item.json
: (Per semplicità, vengono utilizzati solo pochi attributi dell'item).
{ "Id": {"N": "789"}, "ProductCategory": {"S": "Home Improvement"}, "Price": {"N": "52"}, "InStock": {"BOOL": true}, "Brand": {"S": "Acme"} }
Argomenti
Modifica degli attributi
Esempio
Aggiorna gli attributi ProductCategory
e 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
Gli argomenti per --expression-attribute-values
sono memorizzati nel file values.json
:
{ ":c": { "S": "Hardware" }, ":p": { "N": "60" } }
Nota
Nell'operazione UpdateItem
, --return-values ALL_NEW
fa in modo che DynamoDB restituisca l'elemento come compare dopo l'aggiornamento.
Aggiunta di elenchi e mappe
Esempio
Aggiungi un nuovo elenco e una nuova mappa.
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
Gli argomenti per --expression-attribute-values
sono memorizzati nel file values.json
:
{ ":ri": { "L": [ { "S": "Hammer" } ] }, ":pr": { "M": { "FiveStar": { "L": [ { "S": "Best product ever!" } ] } } } }
Aggiunta di elementi a un elenco
Esempio
Aggiungi un nuovo attributo all'elenco RelatedItems
. Ricorda che gli elementi dell'elenco sono a base zero, ovvero [0] rappresenta il primo elemento nell'elenco, [1] il secondo e così via.
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
Gli argomenti per --expression-attribute-values
sono memorizzati nel file values.json
:
{ ":ri": { "S": "Nails" } }
Nota
Quando utilizzi SET
per aggiornare un elemento dell'elenco, i contenuti dell'elemento vengono sostituiti con i nuovi dati specificati. Se l'elemento non esiste ancora, SET
aggiunge il nuovo elemento alla fine dell'elenco.
Se aggiungi più elementi in un'unica operazione SET
, gli elementi verranno ordinati per numero di elemento.
Aggiunta di attributi di mappa nidificati
Esempio
Aggiungi alcuni attributi di mappa nidificati.
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
Gli argomenti per --expression-attribute-names
sono memorizzati nel file names.json
:
{ "#pr": "ProductReviews", "#5star": "FiveStar", "#3star": "ThreeStar" }
Gli argomenti per --expression-attribute-values
sono memorizzati nel file values.json
:
{ ":r5": { "S": "Very happy with my purchase" }, ":r3": { "L": [ { "S": "Just OK - not that great" } ] } }
Incremento e decremento di attributi numerici
Puoi eseguire aggiunte o sottrazioni da un attributo numerico esistente. A questo scopo, utilizza gli operatori +
(più) e -
(meno).
Esempio
Riduci il valore Price
di un elemento.
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
Per aumentare il valore Price
, puoi utilizzare l'operatore +
nell'espressione di aggiornamento.
Aggiunta di elementi a un elenco
Puoi aggiungere elementi alla fine di un elenco. A tale scopo, utilizza SET
con la funzione list_append
. Il nome funzione rileva la distinzione tra maiuscole e minuscole. La funzione list_append
è specifica dell'operazione SET
e può essere utilizzata solo in un'espressione di aggiornamento. La sintassi è esposta di seguito.
-
list_append (
list1
,list2
)
La funzione prende due liste come input e aggiunge tutti gli elementi da
a list2
.list1
Esempio
In Aggiunta di elementi a un elenco, viene creato l'elenco RelatedItems
e popolato con due elementi: Hammer
e Nails
. Vengono quindi aggiunti due altri elementi alla fine di 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
Gli argomenti per --expression-attribute-values
sono memorizzati nel file values.json
:
{ ":vals": { "L": [ { "S": "Screwdriver" }, {"S": "Hacksaw" } ] } }
Infine, viene aggiunto un ulteriore elemento all'inizio di RelatedItems
. A questo scopo, scambia l'ordine degli elementi list_append
. Ricorda che list_append
accetta due elenchi come input e aggiunge il secondo elenco al primo.
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'attributo RelatedItems
risultante contiene ora cinque elementi nell'ordine seguente: Chisel
, Hammer
, Nails
, Screwdriver
, Hacksaw
.
Prevenzione delle sovrascritture di un attributo esistente
Esempio
Imposta l'attributo Price
di un elemento, ma solo se l'elemento non dispone già di un attributo Price
. Se l'attributo Price
esiste già, non accade nulla.
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— eliminazione di attributi da un elemento
Utilizza l'operazione REMOVE
in una espressione di aggiornamento per rimuovere uno o più attributi di un elemento in Amazon DynamoDB. Per eseguire più operazioni REMOVE
, separarle con virgole.
Di seguito è riportato un riepilogo della sintassi di REMOVE
in un'espressione di aggiornamento. L'unico operando è il percorso di documento dell'attributo che intendi rimuovere.
remove-action ::=
path
Esempio
Rimuovi alcuni attributi di un elemento. Se gli attributi non esistono, non accade nulla.
aws dynamodb update-item \ --table-name ProductCatalog \ --key '{"Id":{"N":"789"}}' \ --update-expression "REMOVE Brand, InStock, QuantityOnHand" \ --return-values ALL_NEW
Rimozione di elementi da un elenco
Puoi utilizzare REMOVE
per eliminare singoli elementi da un elenco.
Esempio
In Aggiunta di elementi a un elenco, modifica un attributo di elenco (RelatedItems
) in modo che contenga cinque elementi:
-
[0]
—Chisel
-
[1]
—Hammer
-
[2]
—Nails
-
[3]
—Screwdriver
-
[4]
—Hacksaw
L'esempio seguente AWS Command Line Interface (AWS CLI) elimina Hammer
e Nails
dall'elenco.
aws dynamodb update-item \ --table-name ProductCatalog \ --key '{"Id":{"N":"789"}}' \ --update-expression "REMOVE RelatedItems[1], RelatedItems[2]" \ --return-values ALL_NEW
Dopo che Hammer
e Nails
sono stati rimossi, gli elementi rimanenti vengono spostati. Ora l'elenco contiene quanto segue:
-
[0]
—Chisel
-
[1]
—Screwdriver
-
[2]
—Hacksaw
ADD— aggiornamento di numeri e set
Nota
In generale, consigliamo di utilizzare SET
anziché ADD
.
Utilizza l'operazione ADD
in un'espressione di aggiornamento per aggiungere un nuovo attributo e i suoi valori a un elemento.
Se l'attributo esiste già, il comportamento di ADD
dipende dal tipo di dati dell'attributo:
-
Se l'attributo è un numero e anche il valore da aggiungere è un numero, il valore viene aggiunto matematicamente all'attributo esistente. Se il valore è un numero negativo, viene sottratto dall'attributo esistente.
-
Se l'attributo è un set e anche il valore da aggiungere è un set, il valore viene aggiunto matematicamente al set esistente.
Nota
L'operazione ADD
supporta solo i tipi di dati Number e Set.
Per eseguire più operazioni ADD
, separarle con virgole.
Nel riepilogo della sintassi seguente:
-
Il
path
elemento è il percorso del documento verso un attributo. L'attributo deve essere un tipo di datiNumber
o Set. -
Il
value
elemento è un numero che si desidera aggiungere all'attributo (perNumber
i tipi di dati) o un set da aggiungere all'attributo (per i tipi di set).
add-action ::=
path
value
Gli argomenti seguenti illustrano diversi casi d'uso dell'operazione ADD
.
Aggiunta di un numero
Supponiamo che l'attributo QuantityOnHand
non esista. L' AWS CLI esempio seguente è impostato QuantityOnHand
su 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
Ora che QuantityOnHand
esiste, puoi eseguire nuovamente l'esempio per incrementare QuantityOnHand
ogni volta di 5.
Aggiunta di elementi a un set
Supponiamo che l'attributo Color
non esista. L'esempio AWS CLI
seguente imposta Color
su un set di stringhe con due elementi.
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
Ora che Color
esiste, puoi aggiungergli più elementi:
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— rimozione di elementi da un set
Importante
L'operazione DELETE
supporta solo i tipi di dati Set
.
Utilizza l'operazione DELETE
in un'espressione di aggiornamento per rimuovere uno o più elementi da un set. Per eseguire più operazioni DELETE
, separarle con virgole.
Nel riepilogo della sintassi seguente:
-
Il
path
elemento è il percorso del documento verso un attributo. L'attributo deve essere un tipo di dati Set. -
Il
subset
è uno o più elementi da cui si desidera eliminarepath
. È necessario specificaresubset
come tipo di set.
delete-action ::=
path
subset
Esempio
In Aggiunta di elementi a un set, crea lo String Set Color
. In questo esempio vengono rimossi alcuni elementi di tale set.
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
Utilizzo di più espressioni di aggiornamento
Puoi utilizzare più espressioni di aggiornamento in una singola istruzione.
Se desideri modificare il valore di un attributo e rimuovere completamente un altro attributo, puoi usare un'REMOVEazione SET e una in una singola istruzione. Questa operazione imposta il valore di Price
su 15 e rimuove l'attributo InStock
dall'elemento.
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
Se desideri aggiungere qualcosa a un elenco modificando anche il valore di un altro attributo, puoi utilizzare due SET azioni in un'unica istruzione. Questa operazione aggiunge "Nails" all'attributo di elenco RelatedItems
e imposta il valore di Price
su 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