Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Menggunakan ekspresi pembaruan di DynamoDB
Operasi UpdateItem
memperbarui item yang sudah ada, atau menambahkan item baru ke tabel jika belum ada. Anda harus memberikan kunci item yang ingin Anda perbarui. Anda juga harus menyediakan ekspresi pembaruan, yang menunjukkan atribut yang ingin Anda ubah dan nilai yang ingin Anda tetapkan padanya.
Ekspresi pembaruan menentukan cara UpdateItem
mengubah atribut item—misalnya, menetapkan nilai skalar atau menghapus elemen dari daftar atau peta.
Berikut ini adalah ringkasan sintaksis untuk ekspresi pembaruan.
update-expression ::= [ SET
action
[,action
] ... ] [ REMOVEaction
[,action
] ...] [ ADDaction
[,action
] ... ] [ DELETEaction
[,action
] ...]
Ekspresi pembaruan terdiri dari satu atau lebih klausa. Setiap klausa dimulai dengan kata kunci SET
, REMOVE
, ADD
, atau DELETE
. Anda dapat memasukkan salah satu klausa ini dalam ekspresi pembaruan, dalam urutan apa pun. Namun, setiap kata kunci tindakan hanya dapat muncul satu kali.
Dalam setiap klausa, ada satu atau lebih tindakan yang dipisahkan dengan koma. Setiap tindakan mewakili modifikasi data.
Contoh dalam bagian ini didasarkan pada item ProductCatalog
yang ditampilkan dalam Menggunakan ekspresi proyeksi di DynamoDB.
Topik di bawah ini mencakup beberapa kasus penggunaan yang berbeda untuk SET
tindakan tersebut.
Topik
SET— memodifikasi atau menambahkan atribut item
Gunakan tindakan SET
dalam ekspresi pembaruan untuk menambahkan satu atau beberapa atribut ke item. Jika salah satu atribut ini sudah ada, atribut tersebut akan ditimpa dengan nilai baru. Jika Anda ingin menghindari menimpa atribut yang ada, Anda dapat menggunakan SET
dengan. if_not_exists function
Fungsi if_not_exists
khusus untuk tindakan SET
dan hanya dapat digunakan dalam ekspresi pembaruan.
Saat Anda menggunakan SET
untuk memperbarui elemen daftar, konten elemen akan diganti dengan data baru yang Anda tentukan. Jika elemen tersebut belum ada, SET
menambahkan elemen baru pada akhir daftar.
Jika Anda menambahkan beberapa elemen dalam satu operasi SET
, elemen diurutkan berdasarkan nomor elemen.
Anda juga dapat menggunakan SET
untuk menambahkan atau mengurangi dari atribut yang berjenis Number
. Untuk melakukan beberapa tindakan SET
, pisahkan dengan koma.
Dalam ringkasan sintaks berikut:
-
Bagian
path
elemen adalah jalur dokumen ke item. -
Sebuah
operand
elemen dapat berupa jalur dokumen ke item atau fungsi.
set-action ::=
path
= value value ::=operand
|operand
'+'operand
|operand
'-'operand
operand ::=path
| function function ::=if_not_exists (path)
Jika item tidak berisi atribut di jalur yang ditentukan, if_not_exists
evaluasi kevalue
. Kalau tidak, itu mengevaluasi. path
Operasi PutItem
berikut membuat item sampel yang dirujuk oleh contoh.
aws dynamodb put-item \ --table-name ProductCatalog \ --item file://item.json
Argumen untuk --item
disimpan dalam file item.json
. (Untuk kemudahan, hanya beberapa atribut item yang digunakan.)
{ "Id": {"N": "789"}, "ProductCategory": {"S": "Home Improvement"}, "Price": {"N": "52"}, "InStock": {"BOOL": true}, "Brand": {"S": "Acme"} }
Topik
Memodifikasi atribut
contoh
Perbarui atribut ProductCategory
dan 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
Argumen untuk --expression-attribute-values
disimpan dalam file values.json
.
{ ":c": { "S": "Hardware" }, ":p": { "N": "60" } }
catatan
Dalam operasi UpdateItem
, --return-values ALL_NEW
menyebabkan DynamoDB untuk mengembalikan item seperti yang muncul setelah pembaruan.
Menambahkan daftar dan peta
contoh
Tambahkan daftar baru dan peta baru.
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
Argumen untuk --expression-attribute-values
disimpan dalam file values.json
.
{ ":ri": { "L": [ { "S": "Hammer" } ] }, ":pr": { "M": { "FiveStar": { "L": [ { "S": "Best product ever!" } ] } } } }
Menambahkan elemen ke daftar
contoh
Tambahkan atribut baru ke daftar RelatedItems
. (Ingatlah bahwa elemen daftar berbasis nol, sehingga [0] mewakili elemen pertama dalam daftar, [1] mewakili elemen kedua, dan seterusnya.)
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
Argumen untuk --expression-attribute-values
disimpan dalam file values.json
.
{ ":ri": { "S": "Nails" } }
catatan
Saat Anda menggunakan SET
untuk memperbarui elemen daftar, konten elemen akan diganti dengan data baru yang Anda tentukan. Jika elemen tersebut belum ada, SET
menambahkan elemen baru pada akhir daftar.
Jika Anda menambahkan beberapa elemen dalam satu operasi SET
, elemen diurutkan berdasarkan nomor elemen.
Menambahkan atribut peta bersarang
contoh
Tambahkan beberapa atribut peta bersarang.
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
Argumen untuk --expression-attribute-names
disimpan dalam file names.json
.
{ "#pr": "ProductReviews", "#5star": "FiveStar", "#3star": "ThreeStar" }
Argumen untuk --expression-attribute-values
disimpan dalam file values.json
.
{ ":r5": { "S": "Very happy with my purchase" }, ":r3": { "L": [ { "S": "Just OK - not that great" } ] } }
Menambahkan dan mengurangi atribut numerik
Anda dapat menambahkan atau mengurangi dari atribut numerik yang sudah ada. Untuk melakukannya, gunakan operator +
(plus) dan -
(minus).
contoh
Kurangi Price
dari item.
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
Untuk meningkatkan Price
, Anda akan menggunakan operator +
dalam ekspresi pembaruan.
Melekatkan elemen ke daftar
Anda dapat menambahkan elemen ke akhir daftar. Untuk melakukannya, gunakan SET
dengan fungsi list_append
. (Nama fungsi ini peka huruf besar/kecil.) Fungsi list_append
khusus untuk tindakan SET
dan hanya dapat digunakan dalam ekspresi pembaruan. Sintaksnya adalah sebagai berikut.
-
list_append (
list1
,list2
)
Fungsi ini mengambil dua daftar sebagai input dan menambahkan semua elemen dari
ke list2
.list1
contoh
Dalam Menambahkan elemen ke daftar, Anda mencantumkan RelatedItems
dan mengisinya dengan dua elemen: Hammer
dan Nails
. Sekarang Anda menambahkan dua elemen lagi ke akhir 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
Argumen untuk --expression-attribute-values
disimpan dalam file values.json
.
{ ":vals": { "L": [ { "S": "Screwdriver" }, {"S": "Hacksaw" } ] } }
Akhirnya, Anda menambahkan satu elemen lagi ke awal dari RelatedItems
. Untuk melakukan hal ini, tukar urutan elemen list_append
. (Ingatlah bahwa list_append
mengambil dua daftar sebagai input dan menambahkan daftar kedua ke yang pertama.)
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
Atribut RelatedItems
yang dihasilkan sekarang berisi lima elemen, dalam urutan berikut: Chisel
, Hammer
, Nails
, Screwdriver
, Hacksaw
.
Mencegah penimpaan atribut yang ada
contoh
Tetapkan Price
dari suatu item, tetapi hanya jika item tersebut belum memiliki atribut Price
. (Jika Price
sudah ada, tidak ada yang terjadi.)
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— menghapus atribut dari item
Gunakan tindakan REMOVE
dalam ekspresi pembaruan untuk menghapus satu atau beberapa atribut dari item di Amazon DynamoDB. Untuk melakukan beberapa tindakan REMOVE
, pisahkan dengan koma.
Berikut ini adalah ringkasan sintaks untuk REMOVE
dalam ekspresi pembaruan. Satu-satunya operand adalah jalur dokumen untuk atribut yang ingin Anda hapus.
remove-action ::=
path
contoh
Hapus beberapa atribut dari item. (Jika atribut tidak ada, tidak ada yang terjadi.)
aws dynamodb update-item \ --table-name ProductCatalog \ --key '{"Id":{"N":"789"}}' \ --update-expression "REMOVE Brand, InStock, QuantityOnHand" \ --return-values ALL_NEW
Menghapus elemen dari daftar
Anda dapat menggunakan REMOVE
untuk menghapus elemen individu dari daftar.
contoh
Dalam Melekatkan elemen ke daftar, Anda mengubah atribut daftar (RelatedItems
) sehingga berisi lima elemen:
-
[0]
—Chisel
-
[1]
—Hammer
-
[2]
—Nails
-
[3]
—Screwdriver
-
[4]
—Hacksaw
Berikut AWS Command Line Interface (AWS CLI) contoh menghapus Hammer
dan Nails
dari daftar.
aws dynamodb update-item \ --table-name ProductCatalog \ --key '{"Id":{"N":"789"}}' \ --update-expression "REMOVE RelatedItems[1], RelatedItems[2]" \ --return-values ALL_NEW
Setelah Hammer
dan Nails
dihapus, elemen yang tersisa digeser. Daftarnya sekarang berisi hal-hal berikut:
-
[0]
—Chisel
-
[1]
—Screwdriver
-
[2]
—Hacksaw
ADD— memperbarui angka dan set
catatan
Secara umum, sebaiknya gunakan SET
daripada ADD
.
Gunakan tindakan ADD
dalam ekspresi pembaruan untuk menambahkan atribut baru dan nilainya untuk item.
Jika atribut sudah ada, perilaku ADD
bergantung pada jenis daya atribut ini:
-
Jika atribut adalah angka, dan nilai yang Anda tambahkan juga angka, nilai matematis ditambahkan ke atribut yang ada. (Jika nilai adalah angka negatif, nilai tersebut dikurangi dari atribut yang ada.)
-
Jika atribut adalah suatu set, dan nilai yang Anda tambahkan juga suatu set, nilai ditambahkan ke set yang ada.
catatan
Tindakan ADD
hanya mendukung jenis daya angka dan set.
Untuk melakukan beberapa tindakan ADD
, pisahkan dengan koma.
Dalam ringkasan sintaks berikut:
-
Bagian
path
elemen adalah jalur dokumen ke atribut. Atribut harus berupaNumber
atau jenis daya set. -
Bagian
value
elemen adalah angka yang ingin Anda tambahkan ke atribut (untuk tipeNumber
data), atau set untuk ditambahkan ke atribut (untuk jenis set).
add-action ::=
path
value
Topik di bawah ini mencakup beberapa kasus penggunaan yang berbeda untuk ADD
tindakan tersebut.
Menambahkan nomor
Anggaplah atribut QuantityOnHand
tidak ada. AWS CLI Contoh berikut ditetapkan QuantityOnHand
ke 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
Kini setelah QuantityOnHand
ada, Anda dapat menjalankan kembali contoh untuk menaikkan QuantityOnHand
sebesar 5 setiap kali melakukannya.
Menambahkan elemen ke set
Anggaplah atribut Color
tidak ada. Contoh AWS CLI
berikut menetapkan Color
untuk satu set string dengan dua elemen.
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
Kini setelah Color
ada, Anda dapat menambahkan lebih banyak elemen untuknya.
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— menghapus elemen dari satu set
penting
Tindakan DELETE
hanya mendukung jenis daya Set
.
Gunakan tindakan DELETE
dalam ekspresi pembaruan untuk menghapus satu atau beberapa elemen dari satu set. Untuk melakukan beberapa tindakan DELETE
, pisahkan dengan koma.
Dalam ringkasan sintaks berikut:
-
Bagian
path
elemen adalah jalur dokumen ke atribut. Atribut harus berupa jenis daya set. -
Bagian
subset
adalah satu atau lebih elemen yang ingin Anda hapuspath
. Anda harus menentukansubset
sebagai tipe set.
delete-action ::=
path
subset
contoh
Dalam Menambahkan elemen ke set, Anda membuat set string Color
. Contoh ini akan menghapus beberapa elemen dari set tersebut.
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
Menggunakan beberapa ekspresi pembaruan
Anda dapat menggunakan beberapa ekspresi pembaruan dalam pernyataan tunggal.
Jika Anda ingin mengubah nilai atribut dan menghapus atribut lain sepenuhnya, Anda dapat menggunakan SET dan REMOVE tindakan dalam satu pernyataan. Operasi ini akan mengurangi Price
nilai menjadi 15 sekaligus menghapus InStock
atribut dari item.
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
Jika Anda ingin menambahkan ke daftar sementara juga mengubah nilai atribut lain, Anda bisa menggunakan dua SET tindakan dalam satu pernyataan. Operasi ini akan menambahkan “Nails” ke atribut daftar RelatedItems
dan juga menetapkan nilai Price
ke 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