의 버전 4(V4) SDK for .NET 는 미리 보기 상태입니다. 미리 보기에서이 새 버전에 대한 정보를 보려면 AWS SDK for .NET (버전 4 미리 보기) 개발자 안내서를 참조하세요.
SDK의 V4는 미리 보기 상태이므로 콘텐츠는 변경될 수 있습니다.
기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
참고
이 주제의 정보는 .NET Framework 및 SDK for .NET 버전 3.3 이하를 기반으로 하는 프로젝트에만 해당됩니다.
다음 코드 예제에서는를 사용하여 표현식으로 DynamoDB AWS SDK for .NET 를 프로그래밍하는 방법을 보여줍니다. 표현식은 DynamoDB 테이블의 항목에서 읽을 속성을 나타냅니다. 또한 항목을 쓸 때도 표현식을 사용하여 충족해야 할 조건(조건부 업데이트라고도 함)을 나타내고 속성을 업데이트하는 방식을 나타낼 수 있습니다. 일부 업데이트 예에서는 속성을 새 값으로 바꾸거나 새 데이터를 목록이나 맵에 추가합니다. 자세한 내용은 표현식을 사용하여 항목 읽기 및 쓰기를 참조하십시오.
주제
샘플 데이터
이 주제의 코드 예제는 ProductCatalog
라는 DynamoDB 테이블에 있는 다음 두 가지 예제 항목에 의존합니다. 이 항목들은 가상의 자전거 점포 카탈로그에 있는 제품 항목에 대한 정보를 알려줍니다. 이러한 항목은 사례 연구: ProductCatalog 항목에서 제공하는 예제를 기반으로 합니다. BOOL
, L
, M
, N
, NS
, S
, SS
과 같은 데이터 형식 서술자는 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."
]
}
}
}
}
표현식 및 항목의 기본 키를 사용한 단일 항목 조회
다음 예제에는 Amazon.DynamoDBv2.AmazonDynamoDBClient.GetItem
의 Id
가 있는 항목을 조회하여 출력하는 데 사용할 205
메서드와 일련의 표현식이 포함되어 있습니다. 항목 속성 중에서 Id
, Title
, Description
, Color
, RelatedItems
, Pictures
, 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);
앞서 다룬 예제에서 ProjectionExpression
속성은 반환될 속성을 지정합니다. ExpressionAttributeNames
속성에서는 #pr
속성을 나타낼 자리표시자 ProductReviews
과 #ri
속성을 나타낼 자리표시자 RelatedItems
를 지정합니다. PrintItem
에 대한 호출은 항목 인쇄의 설명과 같이 사용자 지정 함수를 참조합니다.
표현식 및 테이블의 기본 키를 사용한 다수 항목 조회
다음 예제에는 Amazon.DynamoDBv2.AmazonDynamoDBClient.Query
의 값이 Id
보다 큰 경우에 한해 301
의 Price
가 있는 항목을 조회하여 출력하는 데 사용할 150
메서드와 일련의 표현식이 포함되어 있습니다. 항목의 속성 중에서 반환되는 속성은 Id
와 Title
, 그리고 ThreeStar
의 모든 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("=====");
}
앞서 다룬 예제에서 ProjectionExpression
속성은 반환될 속성을 지정합니다. ExpressionAttributeNames
속성은 ProductReviews
속성을 나타내는 자리 표시자 #pr
및 Price
속성을 나타내는 자리 표시자 #p
를 지정합니다. #pr.ThreeStar
는 ThreeStar
속성만 반환하도록 지정합니다. ExpressionAttributeValues
속성에서는 :val
이라는 값을 나타낼 자리표시자 150
을 지정합니다. FilterExpression
속성은 #p
(Price
)가 :val
(150
)보다 커야 한다는 조건을 지정합니다. PrintItem
에 대한 호출은 항목 인쇄의 설명과 같이 사용자 지정 함수를 참조합니다.
표현식 및 기타 항목 속성을 사용한 다수 항목 조회
다음 예제에는 Amazon.DynamoDBv2.AmazonDynamoDBClient.Scan
의 ProductCategory
가 있는 항목을 모두 조회하여 출력하는 데 사용할 Bike
메서드와 일련의 표현식이 포함되어 있습니다. 항목의 속성 중에서 반환되는 속성은 Id
와 Title
, 그리고 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("=====");
}
앞서 다룬 예제에서 ProjectionExpression
속성은 반환될 속성을 지정합니다. ExpressionAttributeNames
속성에서는 #pr
속성을 나타낼 자리표시자 ProductReviews
과 #pc
속성을 나타낼 자리표시자 ProductCategory
를 지정합니다. ExpressionAttributeValues
속성에서는 :catg
이라는 값을 나타낼 자리표시자 Bike
을 지정합니다. FilterExpression
속성에서는 #pc
(ProductCategory
)가 :catg
(Bike
)와 같아야 한다는 조건을 지정합니다. PrintItem
에 대한 호출은 항목 인쇄의 설명과 같이 사용자 지정 함수를 참조합니다.
항목 출력
다음 예제에서는 항목의 속성과 값을 출력하는 방법을 보여줍니다. 이 예제는 표현식 및 항목의 기본 키를 사용하여 단일 항목 가져오기, 표현식 및 테이블의 기본 키를 사용하여 다중 항목 가져오기, 표현식 및 기타 항목 속성을 사용하여 다중 항목 가져오기 방법을 보여주는 앞의 예제에서 사용됩니다.
// 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");
}
앞서 다룬 예제에서는 속성을 출력할 정확한 형식을 결정하기 위해 평가할 수 있는 몇 가지 데이터 형식별 속성이 각 속성 값에 있습니다. 이러한 속성에는 JSON 데이터 형식에 해당하는 B
, BOOL
, BS
, L
, M
, N
, NS
, NULL
, S
및 SS
가 포함됩니다. B
, N
, NULL
, S
와 같은 속성의 경우에는 상응하는 속성이 null
이 아니라면 그 속성은 상응하는 null
아닌 데이터 형식에 대한 것입니다. BS
, L
, M
, NS
, SS
와 같은 속성의 경우에는 Count
값이 0보다 크다면 그 속성은 상응하는 0 아닌 값 데이터 형식에 대한 것입니다. 그 속성의 데이터 형식별 속성 전체가 null
이거나 Count
값이 0인 경우에 그 속성은 BOOL
데이터 형식에 상응하는 것입니다.
표현식을 사용한 항목 생성 및 교체
다음 예제에는 Amazon.DynamoDBv2.AmazonDynamoDBClient.PutItem
의 Title
이 있는 항목을 업데이트하는 데 사용할 18-Bicycle
301
메서드와 일련의 표현식이 포함되어 있습니다. 항목이 아직 없으면 새 항목이 추가됩니다.
// 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);
앞서 다룬 예제에서 ExpressionAttributeNames
속성은 #title
속성을 나타낼 자리표시자 Title
을 지정합니다. ExpressionAttributeValues
속성에서는 :product
이라는 값을 나타낼 자리표시자 18-Bicycle 301
을 지정합니다. ConditionExpression
속성에서는 #title
(Title
)가 :product
(18-Bicycle
301
)와 같아야 한다는 조건을 지정합니다. CreateItemData
에 대한 호출은 다음과 같은 사용자 지정 함수를 참조합니다.
// 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;
}
앞서 다룬 예제에서 샘플 데이터가 있는 예제 항목은 호출자에게 반환됩니다. 일련의 속성과 해당 값은 JSON 데이터 형식에 해당하는 BOOL
, L
, M
, N
, NS
, S
및 SS
등의 데이터 유형을 사용하여 구성됩니다.
표현식을 사용한 항목 업데이트
다음 예제에는 Amazon.DynamoDBv2.AmazonDynamoDBClient.UpdateItem
의 Title
가 있는 항목에 대해 18" Girl's Bike
을 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);
앞서 다룬 예제에서 ExpressionAttributeNames
속성은 #title
속성을 나타낼 자리표시자 Title
을 지정합니다. ExpressionAttributeValues
속성에서는 :newproduct
이라는 값을 나타낼 자리표시자 18" Girl's Bike
을 지정합니다. UpdateExpression
속성에서는 #title
(Title
)을 :newproduct
(18" Girl's
Bike
)로 변경하도록 지정합니다.
표현식을 사용한 항목 삭제
다음 예제에는 항목의 Title
이 18-Bicycle 301
인 경우에 한해 Id
가 301
인 항목을 삭제하는 데 사용할 Amazon.DynamoDBv2.AmazonDynamoDBClient.DeleteItem
메서드와 일련의 표현식이 포함되어 있습니다.
// 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);
앞서 다룬 예제에서 ExpressionAttributeNames
속성은 #title
속성을 나타낼 자리표시자 Title
을 지정합니다. ExpressionAttributeValues
속성에서는 :product
이라는 값을 나타낼 자리표시자 18-Bicycle 301
을 지정합니다. ConditionExpression
속성에서는 #title
(Title
)이 :product
(18-Bicycle
301
)와 같아야 한다는 조건을 지정합니다.
추가 정보
자세한 내용 및 코드 예제는 다음을 참조하십시오.