Verwenden von Ausdrücken mit Amazon DynamoDB und AWS SDK for .NET - AWS SDK for .NET

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Verwenden von Ausdrücken mit Amazon DynamoDB und AWS SDK for .NET

Anmerkung

Die Informationen in diesem Thema beziehen sich speziell auf Projekte, die auf basieren. NETFramework und die AWS SDK for .NET Version 3.3 und früher.

Die folgenden Codebeispiele zeigen, wie Sie DynamoDB mit Ausdrücken programmieren. AWS SDK for .NET Ausdrücke bezeichnen die Attribute, die Sie aus einem Element in einer DynamoDB-Tabelle lesen möchten. Sie können auch Ausdrücke beim Schreiben eines Elements verwenden, um alle zu erfüllenden Bedingungen (bedingte Aktualisierung) und die Art, wie die Attribute aktualisiert werden, anzugeben. In einigen Beispielen zur Aktualisierung wird das Attribut durch einen neuen Wert ersetzt oder es werden einer Liste bzw. einer Map neue Daten hinzugefügt. Weitere Informationen finden Sie unter Reading and Writing Items Using Expressions.

Beispieldaten

Die Codebeispiele in diesem Thema basieren auf den folgenden beiden Beispielelementen in einer DynamoDB-Tabelle mit dem Namen. ProductCatalog Diese Elemente beschreiben Informationen über Produkteinträge im Katalog eines fiktiven Fahrradgeschäftes. Diese Elemente basieren auf dem Beispiel in Case Study: A ProductCatalog Item. Die Datentypdeskriptoren wieBOOL, LM,N,NS,S, und SS entsprechen denen im JSONDatenformat.

{ "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." ] } } } }

Abrufen eines einzelnen Elements mithilfe von Ausdrücken und dem Primärschlüssel des Elements

Im folgenden Beispiel werden die Amazon.DynamoDBv2.AmazonDynamoDBClient.GetItem-Methode sowie eine Gruppe von Ausdrücken zum Abrufen und anschließenden Drucken des Elements mit einer Id von 205 veranschaulicht. Es werden nur die folgenden Attribute des Elements zurückgegeben: Id, Title, Description, Color, RelatedItems, Pictures und ProductReviews.

// 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);

Im vorangegangenen Beispiel gibt die ProjectionExpression-Eigenschaft die zurückzugebenden Attribute an. Die ExpressionAttributeNames-Eigenschaft gibt den Platzhalter #pr an, der das ProductReviews-Attribut repräsentiert sowie den Platzhalter #ri, der für das RelatedItems-Attribut steht. Das Aufrufen von PrintItem bezieht sich auf eine benutzerdefinierte Funktion, wie unter Drucken eines Elements beschrieben.

Abrufen von mehreren Elementen mithilfe von Ausdrücken und dem Primärschlüssel der Tabelle

Im folgenden Beispiel werden die Amazon.DynamoDBv2.AmazonDynamoDBClient.Query-Methode sowie eine Gruppe von Ausdrücken zum Abrufen und anschließenden Drucken des Elements mit einer Id von 301, jedoch nur, wenn der Wert von Price größer als 150 ist, veranschaulicht. Es werden nur die folgenden Attribute des Elements zurückgegeben: Id, Title sowie sämtliche ThreeStar-Attribute in ProductReviews.

// 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("====="); }

Im vorangegangenen Beispiel gibt die ProjectionExpression-Eigenschaft die zurückzugebenden Attribute an. Die ExpressionAttributeNames-Eigenschaft gibt den Platzhalter #pr an, der das ProductReviews-Attribut repräsentiert sowie den Platzhalter #p, der für das Price-Attribut steht. #pr.ThreeStar gibt an, dass nur das ThreeStar-Attribut zurückgegeben werden soll. Die ExpressionAttributeValues-Eigenschaft gibt den Platzhalter :val an, der den Wert 150 repräsentiert. Die FilterExpression-Eigenschaft gibt an, dass #p (Price) größer als :val (150) sein muss. Das Aufrufen von PrintItem bezieht sich auf eine benutzerdefinierte Funktion, wie unter Drucken eines Elements beschrieben.

Abrufen von mehreren Elementen mithilfe von Ausdrücken und anderen Element-Attributen

Im folgenden Beispiel werden die Amazon.DynamoDBv2.AmazonDynamoDBClient.Scan-Methode sowie eine Gruppe von Ausdrücken zum Abrufen und anschließenden Drucken aller Elemente mit einer ProductCategory von Bike veranschaulicht. Es werden nur die folgenden Attribute des Elements zurückgegeben: Id, Title sowie sämtliche Attribute in ProductReviews.

// 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("====="); }

Im vorangegangenen Beispiel gibt die ProjectionExpression-Eigenschaft die zurückzugebenden Attribute an. Die ExpressionAttributeNames-Eigenschaft gibt den Platzhalter #pr an, der das ProductReviews-Attribut repräsentiert sowie den Platzhalter #pc, der für das ProductCategory-Attribut steht. Die ExpressionAttributeValues-Eigenschaft gibt den Platzhalter :catg an, der den Wert Bike repräsentiert. Die FilterExpression-Eigenschaft gibt an, dass #pc (ProductCategory) gleich :catg (Bike) sein muss. Das Aufrufen von PrintItem bezieht sich auf eine benutzerdefinierte Funktion, wie unter Drucken eines Elements beschrieben.

Drucken eines Elements

Im folgenden Beispiel wird gezeigt, wie die Attribute und Werte eines Elements gedruckt werden. Dieses Beispiel wird in den vorherigen Beispielen verwendet, in denen Folgendes veranschaulicht wurde: Abrufen eines einzelnen Elements mithilfe von Ausdrücken und dem Primärschlüssel des Elements, Abrufen von mehreren Elements mithilfe von Ausdrücken und dem Primärschlüssel der Tabelle sowie Abrufen von mehreren Elements mithilfe von Ausdrücken und anderen Element-Attributen.

// 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"); }

Im vorherigen Beispiel hat jeder Attributwert mehrere data-type-specific Eigenschaften, die ausgewertet werden können, um das richtige Format für den Ausdruck des Attributs zu bestimmen. Zu diesen Eigenschaften gehören B BOOLBS,L, MN,NS,NULL,S, undSS, die denen im JSONDatenformat entsprechen. Wenn bei Eigenschaften wie B, N, NULL und S die entsprechende Eigenschaft nicht null ist, besitzt das Attribut den entsprechenden nicht-null-Datentyp. Bei Eigenschaften wieBS,, LM, und NSSS, wenn Count der Wert größer als Null ist, hat das Attribut den entsprechenden non-zero-value Datentyp. Wenn alle data-type-specific Eigenschaften des Attributs entweder null oder Count gleich Null sind, entspricht das Attribut dem BOOL Datentyp.

Erstellen oder Ersetzen eines Elements mithilfe von Ausdrücken

Im folgenden Beispiel werden die Amazon.DynamoDBv2.AmazonDynamoDBClient.PutItem-Methode sowie eine Gruppe von Ausdrücken zum Aktualisieren des Elements mit einem Title von 18-Bicycle 301 veranschaulicht. Wenn das Element noch nicht vorhanden ist, wird ein neues Element hinzugefügt.

// 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);

Im vorangegangenen Beispiel gibt die ExpressionAttributeNames-Eigenschaft den Platzhalter #title an, der das Title-Attribut repräsentiert. Die ExpressionAttributeValues-Eigenschaft gibt den Platzhalter :product an, der den Wert 18-Bicycle 301 repräsentiert. Die ConditionExpression-Eigenschaft gibt an, dass #title (Title) gleich :product (18-Bicycle 301) sein muss. Das Aufrufen von CreateItemData bezieht sich auf die folgende benutzerdefinierte Funktion:

// 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; }

Im vorherigen Beispiel wird ein Beispielelement mit Beispieldaten an den Aufrufer zurückgegeben. Eine Reihe von Attributen und entsprechenden Werten wird mithilfe von Datentypen wie BOOLL,M,N, NSS, und erstelltSS, die denen im JSONDatenformat entsprechen.

Aktualisieren eines Elements mithilfe von Ausdrücken

Im folgenden Beispiel werden die Amazon.DynamoDBv2.AmazonDynamoDBClient.UpdateItem-Methode sowie eine Gruppe von Ausdrücken zum Ändern von Title in 18" Girl's Bike für das Element mit einer Id von 301 veranschaulicht.

// 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);

Im vorangegangenen Beispiel gibt die ExpressionAttributeNames-Eigenschaft den Platzhalter #title an, der das Title-Attribut repräsentiert. Die ExpressionAttributeValues-Eigenschaft gibt den Platzhalter :newproduct an, der den Wert 18" Girl's Bike repräsentiert. Die UpdateExpression-Eigenschaft gibt an, dass #title (Title) in :newproduct (18" Girl's Bike) geändert werden soll.

Löschen eines Elements mithilfe von Ausdrücken

Im folgenden Beispiel werden die Amazon.DynamoDBv2.AmazonDynamoDBClient.DeleteItem-Methode sowie eine Gruppe von Ausdrücken zum Löschen eines Elements mit einer Id von 301 veranschaulicht, allerdings nur, wenn der Title des Elements 18-Bicycle 301 lautet.

// 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);

Im vorangegangenen Beispiel gibt die ExpressionAttributeNames-Eigenschaft den Platzhalter #title an, der das Title-Attribut repräsentiert. Die ExpressionAttributeValues-Eigenschaft gibt den Platzhalter :product an, der den Wert 18-Bicycle 301 repräsentiert. Die ConditionExpression-Eigenschaft gibt an, dass #title (Title) gleich :product (18-Bicycle 301) sein muss.

Weitere Infos

Weitere Informationen und Codeeispiele finden Sie unter