Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Uso de expresiones con Amazon DynamoDB y AWS SDK for .NET
nota
La información de este tema es específica de los proyectos basados en. NETFramework y la AWS SDK for .NET versión 3.3 y anteriores.
Los siguientes ejemplos de código muestran cómo utilizar el AWS SDK for .NET para programar DynamoDB con expresiones. Las expresiones se utilizan para indicar los atributos que se desea leer de un elemento en una tabla de DynamoDB. Además, se pueden utilizar al escribir un elemento para indicar las condiciones que se deben cumplir (lo que recibe el nombre también de actualización condicional) y la manera en que se deben actualizar los atributos. Algunos ejemplos de actualización sustituyen el atributo por un valor nuevo o añaden datos nuevos a una lista o mapa. Para obtener más información acerca del uso de expresiones, consulte el tema sobre cómo leer y escribir elementos mediante expresiones.
Temas
- Datos de ejemplo
- Obtención de un elemento individual utilizando expresiones y la clave principal del elemento
- Obtención de varios elementos utilizando expresiones y la clave principal de la tabla
- Obtención de varios elementos utilizando expresiones y otros atributos del elemento
- Imprimir un elemento
- Crear o reemplazar un elemento utilizando expresiones
- Actualizar un elemento utilizando expresiones
- Eliminación de un elemento utilizando expresiones
- Más información
Datos de ejemplo
Los ejemplos de código de este tema hacen referencia a los dos elementos de ejemplo siguientes de una tabla de DynamoDB llamada ProductCatalog
. Estos elementos describen información sobre entradas de producto en un catálogo ficticio de una tienda de bicicletas. Estos elementos se basan en el ejemplo proporcionado en Case Study: A ProductCatalog Item. Los descriptores de los tipos de datos BOOL
L
, comoM
,N
,NS
,S
, y SS
corresponden a los del formato de JSON datos.
{ "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." ] } } } }
Obtención de un elemento individual utilizando expresiones y la clave principal del elemento
En el siguiente ejemplo se muestra el método Amazon.DynamoDBv2.AmazonDynamoDBClient.GetItem
y un conjunto de expresiones para obtener y luego imprimir el elemento que tenga un Id
205
. Solo se devuelven los siguientes atributos del elemento: Id
, Title
, Description
, Color
, RelatedItems
, Pictures
y 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);
En el ejemplo anterior, la propiedad ProjectionExpression
especifica los atributos que se deben devolver. La propiedad ExpressionAttributeNames
especifica el marcador de posición #pr
para que represente el atributo ProductReviews
y el marcador de posición #ri
para que represente el atributo RelatedItems
. La llamada a PrintItem
hace referencia a una función personalizada, tal como se describe en Imprimir un elemento.
Obtención de varios elementos utilizando expresiones y la clave principal de la tabla
En el siguiente ejemplo se muestra el método Amazon.DynamoDBv2.AmazonDynamoDBClient.Query
y un conjunto de expresiones para obtener y luego imprimir el elemento que tenga un Id
301
, pero únicamente si el valor de Price
es mayor que 150
. Solo se devuelven los siguientes atributos del elemento: Id
, Title
y todos los atributos de ThreeStar
en 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("====="); }
En el ejemplo anterior, la propiedad ProjectionExpression
especifica los atributos que se deben devolver. La propiedad ExpressionAttributeNames
especifica el marcador de posición #pr
para que represente el atributo ProductReviews
y el marcador de posición #p
para que represente el atributo Price
. #pr.ThreeStar
especifica que solo se devuelva el atributo ThreeStar
. La propiedad ExpressionAttributeValues
especifica el marcador de posición :val
para que represente el valor 150
. La propiedad FilterExpression
especifica que #p
(Price
) debe ser mayor que :val
(150
). La llamada a PrintItem
hace referencia a una función personalizada, tal como se describe en Imprimir un elemento.
Obtención de varios elementos utilizando expresiones y otros atributos del elemento
En el siguiente ejemplo se muestra el método Amazon.DynamoDBv2.AmazonDynamoDBClient.Scan
y un conjunto de expresiones para obtener y luego imprimir todos los elementos que tengan un elemento ProductCategory
Bike
. Solo se devuelven los siguientes atributos del elemento: Id
, Title
y todos los atributos de 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("====="); }
En el ejemplo anterior, la propiedad ProjectionExpression
especifica los atributos que se deben devolver. La propiedad ExpressionAttributeNames
especifica el marcador de posición #pr
para que represente el atributo ProductReviews
y el marcador de posición #pc
para que represente el atributo ProductCategory
. La propiedad ExpressionAttributeValues
especifica el marcador de posición :catg
para que represente el valor Bike
. La propiedad FilterExpression
especifica que #pc
(ProductCategory
) debe ser igual que :catg
(Bike
). La llamada a PrintItem
hace referencia a una función personalizada, tal como se describe en Imprimir un elemento.
Imprimir un elemento
El siguiente ejemplo muestra cómo imprimir los atributos y valores de un elemento. Este ejemplo se utiliza en los ejemplos anteriores que muestran cómo Obtener un elemento individual utilizando expresiones y la clave principal del elemento, Obtener varios elementos utilizando expresiones y la clave principal de la tabla y Obtener varios elementos utilizando expresiones y otros atributos del elemento.
// 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"); }
En el ejemplo anterior, cada valor de atributo tiene varias data-type-specific propiedades que se pueden evaluar para determinar el formato correcto para imprimir el atributo. Estas propiedades incluyen B
BOOL
,BS
,L
,M
,N
, NS
NULL
, y S
SS
, que corresponden a las del formato de JSON datos. Para propiedades como B
, N
, NULL
y S
, si la propiedad correspondiente no es null
, entonces el atributo será del tipo de datos no null
correspondiente. En el caso de propiedades como BS
L
M
,NS
,, ySS
, si Count
es mayor que cero, el atributo es del tipo de non-zero-value datos correspondiente. Si todas las data-type-specific propiedades del atributo son cero null
o son Count
iguales a cero, el atributo corresponde al tipo de BOOL
datos.
Crear o reemplazar un elemento utilizando expresiones
En el siguiente ejemplo se muestra el método Amazon.DynamoDBv2.AmazonDynamoDBClient.PutItem
y un conjunto de expresiones para actualizar el elemento que tenga un Title
18-Bicycle
301
. Si el elemento no existe todavía, se añade uno nuevo.
// 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);
En el ejemplo anterior, la propiedad ExpressionAttributeNames
especifica el marcador de posición #title
para que represente el atributo Title
. La propiedad ExpressionAttributeValues
especifica el marcador de posición :product
para que represente el valor 18-Bicycle 301
. La propiedad ConditionExpression
especifica que #title
(Title
) debe ser igual que :product
(18-Bicycle
301
). La llamada a CreateItemData
hace referencia a la siguiente función personalizada:
// 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; }
En el ejemplo anterior, se devuelve un elemento de ejemplo con datos de muestra al intermediario. Se crea una serie de atributos y sus valores correspondientes utilizando tipos de datos comoBOOL
,L
,M
,N
, NS
S
, ySS
, que se corresponden con los del formato de JSON datos.
Actualizar un elemento utilizando expresiones
El siguiente ejemplo muestra el método Amazon.DynamoDBv2.AmazonDynamoDBClient.UpdateItem
y un conjunto de expresiones para cambiar el Title
a 18" Girl's Bike
para el elemento con un Id
301
.
// 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);
En el ejemplo anterior, la propiedad ExpressionAttributeNames
especifica el marcador de posición #title
para que represente el atributo Title
. La propiedad ExpressionAttributeValues
especifica el marcador de posición :newproduct
para que represente el valor 18" Girl's Bike
. La propiedad UpdateExpression
especifica que se cambie #title
(Title
) por :newproduct
(18" Girl's
Bike
).
Eliminación de un elemento utilizando expresiones
El siguiente ejemplo muestra el método Amazon.DynamoDBv2.AmazonDynamoDBClient.DeleteItem
y un conjunto de expresiones para eliminar el elemento con un Id
301
pero solo si el Title
del elemento es 18-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);
En el ejemplo anterior, la propiedad ExpressionAttributeNames
especifica el marcador de posición #title
para que represente el atributo Title
. La propiedad ExpressionAttributeValues
especifica el marcador de posición :product
para que represente el valor 18-Bicycle 301
. La propiedad ConditionExpression
especifica que #title
(Title
) debe ser igual que :product
(18-Bicycle
301
).
Más información
Para obtener más información y ejemplos de código, consulte:
-
Acceso a atributos de elemento con expresiones de proyección
-
Uso de marcadores de posición para nombres y valores de atributo
-
Modificación de elementos y atributos con expresiones de actualización
-
Trabajar con elementos utilizando el AWS SDK for .NET nivel bajo API
-
Consulta de tablas mediante el nivel bajo AWS SDK for .NET API
-
Escaneo de tablas mediante el nivel inferior AWS SDK for .NET API
-
Trabajar con índices secundarios locales utilizando el nivel bajo AWS SDK for .NET API
-
Trabajar con índices secundarios globales utilizando el nivel bajo AWS SDK for .NET API