Menggunakan Ekspresi dengan Amazon DynamoDB dan AWS SDK for .NET - AWS SDK for .NET

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 .NET Framework 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.

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, NSS, dan SS sesuai dengan yang ada di Format Data JSON.

{ "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, ColorRelatedItems,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. ExpressionAttributeNamesProperti 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: IdTitle,, 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. ExpressionAttributeNamesProperti menentukan placeholder #pr untuk mewakili ProductReviews atribut dan placeholder #p untuk mewakili atribut. Price #pr.ThreeStarmenentukan untuk mengembalikan hanya ThreeStar atribut. ExpressionAttributeValuesProperti menentukan placeholder :val untuk mewakili nilai. 150 FilterExpressionProperti 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: IdTitle,, 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. ExpressionAttributeNamesProperti menentukan placeholder #pr untuk mewakili ProductReviews atribut dan placeholder #pc untuk mewakili atribut. ProductCategory ExpressionAttributeValuesProperti menentukan placeholder :catg untuk mewakili nilai. Bike FilterExpressionProperti 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 Data JSON. Untuk properti sepertiB,N,NULL, danS, jika properti yang sesuai tidaknull, maka atribut adalah tipe null non-data yang sesuai. Untuk properti sepertiBS,, LM,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 ExpressionAttributeValuesProperti menentukan placeholder :product untuk mewakili nilai. 18-Bicycle 301 ConditionExpressionProperti 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, dan SSS, yang sesuai dengan yang ada dalam Format Data JSON.

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 ExpressionAttributeValuesProperti menentukan placeholder :newproduct untuk mewakili nilai. 18" Girl's Bike UpdateExpressionProperti 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 ExpressionAttributeValuesProperti menentukan placeholder :product untuk mewakili nilai. 18-Bicycle 301 ConditionExpressionProperti menentukan bahwa #title (Title) harus sama :product (18-Bicycle 301).

Info Selengkapnya

Untuk informasi selengkapnya dan contoh kode, lihat: