Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Menggunakan Ekspresi dengan Amazon DynamoDB dan AWS SDK for .NET
catatan
Informasi dalam topik ini khusus untuk proyek berdasarkan. NETKerangka kerja dan AWS SDK for .NET versi 3.3 dan sebelumnya.
Contoh kode berikut menunjukkan bagaimana menggunakan AWS SDK for .NET untuk program DynamoDB dengan ekspresi. Ekspresi menunjukkan atribut yang ingin Anda baca dari item dalam tabel DynamoDB. Anda juga menggunakan ekspresi saat menulis item, untuk menunjukkan kondisi apa pun yang harus dipenuhi (juga dikenal sebagai pembaruan bersyarat) dan bagaimana atribut akan diperbarui. Beberapa contoh pembaruan mengganti atribut dengan nilai baru, atau menambahkan data baru ke daftar atau peta. Untuk informasi selengkapnya, lihat Membaca dan Menulis Item Menggunakan Ekspresi.
Topik
Sampel Data
Contoh kode dalam topik ini bergantung pada dua item contoh berikut dalam tabel DynamoDB bernama. ProductCatalog
Barang-barang ini menjelaskan informasi tentang entri produk dalam katalog toko sepeda fiktif. Item ini didasarkan pada contoh yang diberikan dalam Studi Kasus: ProductCatalog Item. Deskriptor tipe data sepertiBOOL
,,L
,M
,,N
, NS
S
, dan SS
sesuai dengan yang ada dalam Format JSON Data.
{ "Id": { "N": "205" }, "Title": { "S": "20-Bicycle 205" }, "Description": { "S": "205 description" }, "BicycleType": { "S": "Hybrid" }, "Brand": { "S": "Brand-Company C" }, "Price": { "N": "500" }, "Gender": { "S": "B" }, "Color": { "SS": [ "Red", "Black" ] }, "ProductCategory": { "S": "Bike" }, "InStock": { "BOOL": true }, "QuantityOnHand": { "N": "1" }, "RelatedItems": { "NS": [ "341", "472", "649" ] }, "Pictures": { "L": [ { "M": { "FrontView": { "S": "http://example/products/205_front.jpg" } } }, { "M": { "RearView": { "S": "http://example/products/205_rear.jpg" } } }, { "M": { "SideView": { "S": "http://example/products/205_left_side.jpg" } } } ] }, "ProductReviews": { "M": { "FiveStar": { "SS": [ "Excellent! Can't recommend it highly enough! Buy it!", "Do yourself a favor and buy this." ] }, "OneStar": { "SS": [ "Terrible product! Do not buy this." ] } } } }, { "Id": { "N": "301" }, "Title": { "S": "18-Bicycle 301" }, "Description": { "S": "301 description" }, "BicycleType": { "S": "Road" }, "Brand": { "S": "Brand-Company C" }, "Price": { "N": "185" }, "Gender": { "S": "F" }, "Color": { "SS": [ "Blue", "Silver" ] }, "ProductCategory": { "S": "Bike" }, "InStock": { "BOOL": true }, "QuantityOnHand": { "N": "3" }, "RelatedItems": { "NS": [ "801", "822", "979" ] }, "Pictures": { "L": [ { "M": { "FrontView": { "S": "http://example/products/301_front.jpg" } } }, { "M": { "RearView": { "S": "http://example/products/301_rear.jpg" } } }, { "M": { "SideView": { "S": "http://example/products/301_left_side.jpg" } } } ] }, "ProductReviews": { "M": { "FiveStar": { "SS": [ "My daughter really enjoyed this bike!" ] }, "ThreeStar": { "SS": [ "This bike was okay, but I would have preferred it in my color.", "Fun to ride." ] } } } }
Dapatkan Item Tunggal dengan Menggunakan Ekspresi dan Kunci Utama Item
Contoh berikut menampilkan Amazon.DynamoDBv2.AmazonDynamoDBClient.GetItem
metode dan satu set ekspresi untuk mendapatkan dan kemudian mencetak item yang memiliki Id
dari205
. Hanya atribut berikut dari item yang dikembalikan:Id
,Title
,Description
, Color
RelatedItems
,Pictures
, danProductReviews
.
// using Amazon.DynamoDBv2; // using Amazon.DynamoDBv2.Model; var client = new AmazonDynamoDBClient(); var request = new GetItemRequest { TableName = "ProductCatalog", ProjectionExpression = "Id, Title, Description, Color, #ri, Pictures, #pr", ExpressionAttributeNames = new Dictionary<string, string> { { "#pr", "ProductReviews" }, { "#ri", "RelatedItems" } }, Key = new Dictionary<string, AttributeValue> { { "Id", new AttributeValue { N = "205" } } }, }; var response = client.GetItem(request); // PrintItem() is a custom function. PrintItem(response.Item);
Dalam contoh sebelumnya, ProjectionExpression
properti menentukan atribut yang akan dikembalikan. ExpressionAttributeNames
Properti menentukan placeholder #pr
untuk mewakili ProductReviews
atribut dan placeholder #ri
untuk mewakili atribut. RelatedItems
Panggilan untuk PrintItem
merujuk ke fungsi kustom seperti yang dijelaskan dalam Cetak Item.
Dapatkan Beberapa Item dengan Menggunakan Ekspresi dan Kunci Utama Tabel
Contoh berikut menampilkan Amazon.DynamoDBv2.AmazonDynamoDBClient.Query
metode dan satu set ekspresi untuk mendapatkan dan kemudian mencetak item yang memiliki Id
dari301
, tetapi hanya jika nilai Price
lebih besar dari150
. Hanya atribut berikut dari item yang dikembalikan: Id
Title
,, dan semua ThreeStar
atribut diProductReviews
.
// using Amazon.DynamoDBv2; // using Amazon.DynamoDBv2.Model; var client = new AmazonDynamoDBClient(); var request = new QueryRequest { TableName = "ProductCatalog", KeyConditions = new Dictionary<string,Condition> { { "Id", new Condition() { ComparisonOperator = ComparisonOperator.EQ, AttributeValueList = new List<AttributeValue> { new AttributeValue { N = "301" } } } } }, ProjectionExpression = "Id, Title, #pr.ThreeStar", ExpressionAttributeNames = new Dictionary<string, string> { { "#pr", "ProductReviews" }, { "#p", "Price" } }, ExpressionAttributeValues = new Dictionary<string,AttributeValue> { { ":val", new AttributeValue { N = "150" } } }, FilterExpression = "#p > :val" }; var response = client.Query(request); foreach (var item in response.Items) { // Write out the first page of an item's attribute keys and values. // PrintItem() is a custom function. PrintItem(item); Console.WriteLine("====="); }
Dalam contoh sebelumnya, ProjectionExpression
properti menentukan atribut yang akan dikembalikan. ExpressionAttributeNames
Properti menentukan placeholder #pr
untuk mewakili ProductReviews
atribut dan placeholder #p
untuk mewakili atribut. Price
#pr.ThreeStar
menentukan untuk mengembalikan hanya ThreeStar
atribut. ExpressionAttributeValues
Properti menentukan placeholder :val
untuk mewakili nilai. 150
FilterExpression
Properti menentukan bahwa #p
(Price
) harus lebih besar dari :val
(150
). Panggilan untuk PrintItem
merujuk ke fungsi kustom seperti yang dijelaskan dalam Cetak Item.
Dapatkan Beberapa Item dengan Menggunakan Ekspresi dan Atribut Item Lainnya
Contoh berikut menampilkan Amazon.DynamoDBv2.AmazonDynamoDBClient.Scan
metode dan satu set ekspresi untuk mendapatkan dan kemudian mencetak semua item yang memiliki ProductCategory
dariBike
. Hanya atribut berikut dari item yang dikembalikan: Id
Title
,, dan semua atribut diProductReviews
.
// using Amazon.DynamoDBv2; // using Amazon.DynamoDBv2.Model; var client = new AmazonDynamoDBClient(); var request = new ScanRequest { TableName = "ProductCatalog", ProjectionExpression = "Id, Title, #pr", ExpressionAttributeValues = new Dictionary<string,AttributeValue> { { ":catg", new AttributeValue { S = "Bike" } } }, ExpressionAttributeNames = new Dictionary<string, string> { { "#pr", "ProductReviews" }, { "#pc", "ProductCategory" } }, FilterExpression = "#pc = :catg", }; var response = client.Scan(request); foreach (var item in response.Items) { // Write out the first page/scan of an item's attribute keys and values. // PrintItem() is a custom function. PrintItem(item); Console.WriteLine("====="); }
Dalam contoh sebelumnya, ProjectionExpression
properti menentukan atribut yang akan dikembalikan. ExpressionAttributeNames
Properti menentukan placeholder #pr
untuk mewakili ProductReviews
atribut dan placeholder #pc
untuk mewakili atribut. ProductCategory
ExpressionAttributeValues
Properti menentukan placeholder :catg
untuk mewakili nilai. Bike
FilterExpression
Properti menentukan bahwa #pc
(ProductCategory
) harus sama dengan :catg
(Bike
). Panggilan untuk PrintItem
merujuk ke fungsi kustom seperti yang dijelaskan dalam Cetak Item.
Cetak Item
Contoh berikut menunjukkan bagaimana untuk mencetak atribut item dan nilai-nilai. Contoh ini digunakan dalam contoh sebelumnya yang menunjukkan cara Mendapatkan Item Tunggal dengan Menggunakan Ekspresi dan Kunci Utama Item, Dapatkan Beberapa Item dengan Menggunakan Ekspresi dan Kunci Utama Tabel, dan Dapatkan Beberapa Item dengan Menggunakan Ekspresi dan Atribut Item Lainnya.
// using Amazon.DynamoDBv2.Model; // Writes out an item's attribute keys and values. public static void PrintItem(Dictionary<string, AttributeValue> attrs) { foreach (KeyValuePair<string, AttributeValue> kvp in attrs) { Console.Write(kvp.Key + " = "); PrintValue(kvp.Value); } } // Writes out just an attribute's value. public static void PrintValue(AttributeValue value) { // Binary attribute value. if (value.B != null) { Console.Write("Binary data"); } // Binary set attribute value. else if (value.BS.Count > 0) { foreach (var bValue in value.BS) { Console.Write("\n Binary data"); } } // List attribute value. else if (value.L.Count > 0) { foreach (AttributeValue attr in value.L) { PrintValue(attr); } } // Map attribute value. else if (value.M.Count > 0) { Console.Write("\n"); PrintItem(value.M); } // Number attribute value. else if (value.N != null) { Console.Write(value.N); } // Number set attribute value. else if (value.NS.Count > 0) { Console.Write("{0}", string.Join("\n", value.NS.ToArray())); } // Null attribute value. else if (value.NULL) { Console.Write("Null"); } // String attribute value. else if (value.S != null) { Console.Write(value.S); } // String set attribute value. else if (value.SS.Count > 0) { Console.Write("{0}", string.Join("\n", value.SS.ToArray())); } // Otherwise, boolean value. else { Console.Write(value.BOOL); } Console.Write("\n"); }
Dalam contoh sebelumnya, setiap nilai atribut memiliki beberapa data-type-specific properti yang dapat dievaluasi untuk menentukan format yang benar untuk mencetak atribut. Properti ini termasukB
,BOOL
,BS
,L
,M
,N
,NS
,NULL
,S
, danSS
, yang sesuai dengan yang ada dalam Format JSON Data. Untuk properti sepertiB
,N
,NULL
, danS
, jika properti yang sesuai tidaknull
, maka atribut adalah tipe null
non-data yang sesuai. Untuk properti sepertiBS
,, L
M
,NS
, danSS
, jika Count
lebih besar dari nol, maka atributnya adalah tipe non-zero-value data yang sesuai. Jika semua data-type-specific properti atribut adalah salah satu null
atau Count
sama dengan nol, maka atribut sesuai dengan tipe BOOL
data.
Membuat atau Mengganti Item dengan Menggunakan Ekspresi
Contoh berikut menampilkan Amazon.DynamoDBv2.AmazonDynamoDBClient.PutItem
metode dan satu set ekspresi untuk memperbarui item yang memiliki a Title
of18-Bicycle
301
. Jika item belum ada, item baru ditambahkan.
// using Amazon.DynamoDBv2; // using Amazon.DynamoDBv2.Model; var client = new AmazonDynamoDBClient(); var request = new PutItemRequest { TableName = "ProductCatalog", ExpressionAttributeNames = new Dictionary<string, string> { { "#title", "Title" } }, ExpressionAttributeValues = new Dictionary<string, AttributeValue> { { ":product", new AttributeValue { S = "18-Bicycle 301" } } }, ConditionExpression = "#title = :product", // CreateItemData() is a custom function. Item = CreateItemData() }; client.PutItem(request);
Dalam contoh sebelumnya, ExpressionAttributeNames
properti menentukan placeholder #title
untuk mewakili atribut. Title
ExpressionAttributeValues
Properti menentukan placeholder :product
untuk mewakili nilai. 18-Bicycle 301
ConditionExpression
Properti menentukan bahwa #title
(Title
) harus sama dengan :product
(18-Bicycle
301
). Panggilan untuk CreateItemData
mengacu pada fungsi kustom berikut:
// using Amazon.DynamoDBv2.Model; // Provides a sample item that can be added to a table. public static Dictionary<string, AttributeValue> CreateItemData() { var itemData = new Dictionary<string, AttributeValue> { { "Id", new AttributeValue { N = "301" } }, { "Title", new AttributeValue { S = "18\" Girl's Bike" } }, { "BicycleType", new AttributeValue { S = "Road" } }, { "Brand" , new AttributeValue { S = "Brand-Company C" } }, { "Color", new AttributeValue { SS = new List<string>{ "Blue", "Silver" } } }, { "Description", new AttributeValue { S = "301 description" } }, { "Gender", new AttributeValue { S = "F" } }, { "InStock", new AttributeValue { BOOL = true } }, { "Pictures", new AttributeValue { L = new List<AttributeValue>{ { new AttributeValue { M = new Dictionary<string,AttributeValue>{ { "FrontView", new AttributeValue { S = "http://example/products/301_front.jpg" } } } } }, { new AttributeValue { M = new Dictionary<string,AttributeValue>{ { "RearView", new AttributeValue {S = "http://example/products/301_rear.jpg" } } } } }, { new AttributeValue { M = new Dictionary<string,AttributeValue>{ { "SideView", new AttributeValue { S = "http://example/products/301_left_side.jpg" } } } } } } } }, { "Price", new AttributeValue { N = "185" } }, { "ProductCategory", new AttributeValue { S = "Bike" } }, { "ProductReviews", new AttributeValue { M = new Dictionary<string,AttributeValue>{ { "FiveStar", new AttributeValue { SS = new List<string>{ "My daughter really enjoyed this bike!" } } }, { "OneStar", new AttributeValue { SS = new List<string>{ "Fun to ride.", "This bike was okay, but I would have preferred it in my color." } } } } } }, { "QuantityOnHand", new AttributeValue { N = "3" } }, { "RelatedItems", new AttributeValue { NS = new List<string>{ "979", "822", "801" } } } }; return itemData; }
Dalam contoh sebelumnya, item contoh dengan data sampel dikembalikan ke pemanggil. Serangkaian atribut dan nilai yang sesuai dibangun, menggunakan tipe data sepertiBOOL
,,L
,M
,N
, NS
S
, danSS
, yang sesuai dengan yang ada dalam Format JSON Data.
Memperbarui Item dengan Menggunakan Ekspresi
Contoh berikut menampilkan Amazon.DynamoDBv2.AmazonDynamoDBClient.UpdateItem
metode dan satu set ekspresi untuk mengubah Title
ke 18" Girl's Bike
untuk item dengan Id
dari301
.
// using Amazon.DynamoDBv2; // using Amazon.DynamoDBv2.Model; var client = new AmazonDynamoDBClient(); var request = new UpdateItemRequest { TableName = "ProductCatalog", Key = new Dictionary<string,AttributeValue> { { "Id", new AttributeValue { N = "301" } } }, ExpressionAttributeNames = new Dictionary<string, string> { { "#title", "Title" } }, ExpressionAttributeValues = new Dictionary<string, AttributeValue> { { ":newproduct", new AttributeValue { S = "18\" Girl's Bike" } } }, UpdateExpression = "SET #title = :newproduct" }; client.UpdateItem(request);
Dalam contoh sebelumnya, ExpressionAttributeNames
properti menentukan placeholder #title
untuk mewakili atribut. Title
ExpressionAttributeValues
Properti menentukan placeholder :newproduct
untuk mewakili nilai. 18" Girl's Bike
UpdateExpression
Properti menentukan untuk mengubah #title
(Title
) ke :newproduct
(18" Girl's
Bike
).
Menghapus Item dengan Menggunakan Ekspresi
Contoh berikut menampilkan Amazon.DynamoDBv2.AmazonDynamoDBClient.DeleteItem
metode dan satu set ekspresi untuk menghapus item dengan Id
dari301
, tetapi hanya jika item Title
tersebut18-Bicycle 301
.
// using Amazon.DynamoDBv2; // using Amazon.DynamoDBv2.Model; var client = new AmazonDynamoDBClient(); var request = new DeleteItemRequest { TableName = "ProductCatalog", Key = new Dictionary<string,AttributeValue> { { "Id", new AttributeValue { N = "301" } } }, ExpressionAttributeNames = new Dictionary<string, string> { { "#title", "Title" } }, ExpressionAttributeValues = new Dictionary<string, AttributeValue> { { ":product", new AttributeValue { S = "18-Bicycle 301" } } }, ConditionExpression = "#title = :product" }; client.DeleteItem(request);
Dalam contoh sebelumnya, ExpressionAttributeNames
properti menentukan placeholder #title
untuk mewakili atribut. Title
ExpressionAttributeValues
Properti menentukan placeholder :product
untuk mewakili nilai. 18-Bicycle 301
ConditionExpression
Properti menentukan bahwa #title
(Title
) harus sama :product
(18-Bicycle
301
).
Info Selengkapnya
Untuk informasi selengkapnya dan contoh kode, lihat: