

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Contoh CLI ekspresi kondisi DynamoDB
<a name="Expressions.ConditionExpressions"></a>

Berikut ini adalah beberapa AWS Command Line Interface (AWS CLI) contoh penggunaan ekspresi kondisi. Contoh-contoh ini berdasarkan tabel `ProductCatalog`, yang diperkenalkan dalam [Mengacu pada atribut item saat menggunakan ekspresi di DynamoDB](Expressions.Attributes.md). Kunci partisi untuk tabel ini adalah `Id`, dan tidak ada kunci urutan. Operasi `PutItem` berikut membuat item `ProductCatalog` 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": "456" },
    "ProductCategory": {"S": "Sporting Goods" },
    "Price": {"N": "650" }
}
```

**Topics**
+ [Put bersyarat](#Expressions.ConditionExpressions.PreventingOverwrites)
+ [Penghapusan bersyarat](#Expressions.ConditionExpressions.AdvancedComparisons)
+ [Pembaruan bersyarat](#Expressions.ConditionExpressions.SimpleComparisons)
+ [Contoh ekspresi bersyarat](#Expressions.ConditionExpressions.ConditionalExamples)

## Put bersyarat
<a name="Expressions.ConditionExpressions.PreventingOverwrites"></a>

Operasi `PutItem` menimpa item dengan kunci primer yang sama (jika ada). Jika Anda ingin menghindari hal ini, gunakan ekspresi kondisi. Hal ini memungkinkan penulisan untuk dilanjutkan hanya jika item yang dimaksud belum memiliki kunci primer yang sama.

Contoh berikut digunakan `attribute_not_exists()` untuk memeriksa apakah kunci primer ada dalam tabel sebelum mencoba operasi tulis. 

**catatan**  
Jika kunci utama Anda terdiri dari kedua kunci partisi (pk) dan kunci sortir (sk), parameter akan memeriksa apakah `attribute_not_exists(pk)` DAN `attribute_not_exists(sk)` mengevaluasi menjadi benar atau salah sebagai pernyataan keseluruhan sebelum mencoba operasi tulis.

```
aws dynamodb put-item \
    --table-name ProductCatalog \
    --item file://item.json \
    --condition-expression "attribute_not_exists(Id)"
```

Jika ekspresi kondisi bernilai false, DynamoDB mengembalikan pesan kesalahan berikut: Permintaan bersyarat gagal.

**catatan**  
Untuk informasi selengkapnya tentang fungsi `attribute_not_exists` dan lainnya, lihat [Kondisi dan filter ekspresi, operator, dan fungsi di DynamoDB](Expressions.OperatorsAndFunctions.md).

## Penghapusan bersyarat
<a name="Expressions.ConditionExpressions.AdvancedComparisons"></a>

Untuk melakukan penghapusan bersyarat, Anda menggunakan operasi `DeleteItem` dengan ekspresi kondisi. Ekspresi kondisi harus bernilai true agar operasi berhasil; jika tidak, operasi akan gagal.

Pertimbangkan item yang didefinisikan di atas.

Misalkan Anda ingin menghapus item, tetapi hanya dalam kondisi berikut:
+  `ProductCategory` adalah "Alat Olahraga" atau "Perlengkapan Berkebun."
+  `Price` adalah antara 500 dan 600.

Contoh berikut mencoba menghapus versi item.

```
aws dynamodb delete-item \
    --table-name ProductCatalog \
    --key '{"Id":{"N":"456"}}' \
    --condition-expression "(ProductCategory IN (:cat1, :cat2)) and (Price between :lo and :hi)" \
    --expression-attribute-values file://values.json
```

Argumen untuk `--expression-attribute-values` disimpan dalam file `values.json`.

```
{
    ":cat1": {"S": "Sporting Goods"},
    ":cat2": {"S": "Gardening Supplies"},
    ":lo": {"N": "500"},
    ":hi": {"N": "600"}
}
```

**catatan**  
Dalam ekspresi kondisi, `:` (karakter titik dua) menunjukkan *nilai atribut ekspresi*—placeholder untuk nilai aktual. Untuk informasi selengkapnya, lihat [Menggunakan nilai atribut ekspresi di DynamoDB](Expressions.ExpressionAttributeValues.md).  
Untuk informasi selengkapnya tentang `IN`, `AND`, dan kata kunci lainnya, lihat [Kondisi dan filter ekspresi, operator, dan fungsi di DynamoDB](Expressions.OperatorsAndFunctions.md).

Dalam contoh ini, perbandingan `ProductCategory` bernilai true, tetapi perbandingan `Price` bernilai false. Hal ini menyebabkan ekspresi kondisi untuk bernilai false dan operasi `DeleteItem` gagal.

## Pembaruan bersyarat
<a name="Expressions.ConditionExpressions.SimpleComparisons"></a>

Untuk melakukan pembaruan bersyarat, Anda menggunakan operasi `UpdateItem` dengan ekspresi kondisi. Ekspresi kondisi harus bernilai true agar operasi berhasil; jika tidak, operasi akan gagal.

**catatan**  
`UpdateItem` juga mendukung *ekspresi pembaruan*, di mana Anda menentukan modifikasi yang ingin Anda buat ke item. Untuk informasi selengkapnya, lihat [Menggunakan ekspresi pembaruan di DynamoDB](Expressions.UpdateExpressions.md).

Misalkan Anda mulai dengan item yang didefinisikan di atas.

Contoh berikut melakukan operasi `UpdateItem`. Operasi ini mencoba untuk mengurangi `Price` dari produk sebesar 75—tetapi ekspresi kondisi mencegah pembaruan jika `Price` saat ini kurang dari atau sama dengan 500.

```
aws dynamodb update-item \
    --table-name ProductCatalog \
    --key '{"Id": {"N": "456"}}' \
    --update-expression "SET Price = Price - :discount" \
    --condition-expression "Price > :limit" \
    --expression-attribute-values file://values.json
```

Argumen untuk `--expression-attribute-values` disimpan dalam file `values.json`.

```
{
    ":discount": { "N": "75"},
    ":limit": {"N": "500"}
}
```

Jika `Price` awal adalah 650, operasi `UpdateItem` mengurangi `Price` menjadi 575. Jika Anda menjalankan operasi `UpdateItem` lagi, `Price` berkurang menjadi 500. Jika Anda menjalankannya untuk kali ketiga, ekspresi kondisi bernilai false, dan pembaruan gagal.

**catatan**  
Dalam ekspresi kondisi, `:` (karakter titik dua) menunjukkan *nilai atribut ekspresi*—placeholder untuk nilai aktual. Untuk informasi selengkapnya, lihat [Menggunakan nilai atribut ekspresi di DynamoDB](Expressions.ExpressionAttributeValues.md).  
Untuk informasi selengkapnya tentang "*>*" dan operator lainnya, lihat [Kondisi dan filter ekspresi, operator, dan fungsi di DynamoDB](Expressions.OperatorsAndFunctions.md).

## Contoh ekspresi bersyarat
<a name="Expressions.ConditionExpressions.ConditionalExamples"></a>

Untuk informasi selengkapnya tentang fungsi yang digunakan dalam contoh berikut, lihat [Kondisi dan filter ekspresi, operator, dan fungsi di DynamoDB](Expressions.OperatorsAndFunctions.md). Jika Anda ingin tahu lebih banyak tentang cara menentukan jenis atribut yang berbeda dalam suatu ekspresi, lihat [Mengacu pada atribut item saat menggunakan ekspresi di DynamoDB](Expressions.Attributes.md). 

### Memeriksa atribut dalam item
<a name="Expressions.ConditionExpressions.CheckingForAttributes"></a>

Anda dapat memeriksa keberadaan (atau ketiadaan) atribut apa pun. Jika ekspresi kondisi bernilai true, operasi berhasil; jika tidak, operasi akan gagal.

Contoh berikut menggunakan `attribute_not_exists` untuk menghapus produk hanya jika operasi tidak memiliki atribut `Price`.

```
aws dynamodb delete-item \
    --table-name ProductCatalog \
    --key '{"Id": {"N": "456"}}' \
    --condition-expression "attribute_not_exists(Price)"
```

DynamoDB juga menyediakan fungsi `attribute_exists`. Contoh berikut menghapus produk hanya jika operasi telah menerima ulasan buruk.

```
aws dynamodb delete-item \
    --table-name ProductCatalog \
    --key '{"Id": {"N": "456"}}' \
    --condition-expression "attribute_exists(ProductReviews.OneStar)"
```

### Memeriksa jenis atribut
<a name="Expressions.ConditionExpressions.CheckingForAttributeType"></a>

Anda dapat memeriksa jenis daya nilai atribut dengan menggunakan fungsi `attribute_type`. Jika ekspresi kondisi bernilai true, operasi berhasil; jika tidak, operasi akan gagal.

Contoh berikut menggunakan `attribute_type` untuk menghapus produk hanya jika memiliki atribut `Color` jenis Set String. 

```
aws dynamodb delete-item \
    --table-name ProductCatalog \
    --key '{"Id": {"N": "456"}}' \
    --condition-expression "attribute_type(Color, :v_sub)" \
    --expression-attribute-values file://expression-attribute-values.json
```

Argumen untuk `--expression-attribute-values` disimpan dalam expression-attribute-values file.json.

```
{
    ":v_sub":{"S":"SS"}
}
```

### Memeriksa nilai awal string
<a name="Expressions.ConditionExpressions.CheckingBeginsWith"></a>

Anda dapat memeriksa apakah nilai atribut String dimulai dengan substring tertentu dengan menggunakan fungsi `begins_with`. Jika ekspresi kondisi bernilai true, operasi berhasil; jika tidak, operasi akan gagal. 

Contoh berikut menggunakan `begins_with` untuk menghapus produk hanya jika elemen `FrontView` dari peta `Pictures` dimulai dengan nilai tertentu.

```
aws dynamodb delete-item \
    --table-name ProductCatalog \
    --key '{"Id": {"N": "456"}}' \
    --condition-expression "begins_with(Pictures.FrontView, :v_sub)" \
    --expression-attribute-values file://expression-attribute-values.json
```

Argumen untuk `--expression-attribute-values` disimpan dalam expression-attribute-values file.json.

```
{
    ":v_sub":{"S":"http://"}
}
```

### Memeriksa elemen dalam set
<a name="Expressions.ConditionExpressions.CheckingForContains"></a>

Anda dapat memeriksa elemen dalam set atau mencari substring dalam string dengan menggunakan fungsi `contains`. Jika ekspresi kondisi bernilai true, operasi berhasil; jika tidak, operasi akan gagal. 

Contoh berikut menggunakan `contains` untuk menghapus produk hanya jika elemen Set String `Color` memiliki elemen dengan nilai tertentu. 

```
aws dynamodb delete-item \
    --table-name ProductCatalog \
    --key '{"Id": {"N": "456"}}' \
    --condition-expression "contains(Color, :v_sub)" \
    --expression-attribute-values file://expression-attribute-values.json
```

Argumen untuk `--expression-attribute-values` disimpan dalam expression-attribute-values file.json.

```
{
    ":v_sub":{"S":"Red"}
}
```

### Memeriksa ukuran nilai atribut
<a name="Expressions.ConditionExpressions.CheckingForSize"></a>

Anda dapat memeriksa ukuran nilai atribut dengan menggunakan fungsi `size`. Jika ekspresi kondisi bernilai true, operasi berhasil; jika tidak, operasi akan gagal. 

Contoh berikut menggunakan `size` untuk menghapus produk hanya jika ukuran atribut Binari `VideoClip` lebih besar dari `64000` byte. 

```
aws dynamodb delete-item \
    --table-name ProductCatalog \
    --key '{"Id": {"N": "456"}}' \
    --condition-expression "size(VideoClip) > :v_sub" \
    --expression-attribute-values file://expression-attribute-values.json
```

Argumen untuk `--expression-attribute-values` disimpan dalam expression-attribute-values file.json.

```
{
    ":v_sub":{"N":"64000"}
}
```