public void FindUserInfoQuest()
{
var request = new QueryRequest
{
TableName = "user_quest_table",
// KeyConditionExpression = "userId = USER#imjae and BEGINS_WITH(questId, 'QUEST#m_materials')",
KeyConditionExpression = "userId = :uid and begins_with(questId, :qib)",
ExpressionAttributeValues = new Dictionary<string, AttributeValue> {
{":uid", new AttributeValue { S = "USER#imjae" }},
{":qib", new AttributeValue { S = "QUEST#m_materials" }}
}
};
client.QueryAsync(request, (result) =>
{
if (result.Exception != null)
{
Debug.LogException(result.Exception);
return;
}
foreach (var item in result.Response.Items)
{
PrintItem(item);
}
});
}
아래와 같이 user_quest_table의 partition key 와 sort key의 조건에 해당하는 데이터를 가져오는 로직이다.
스프링 프레임워크에서 MyBatis 를 사용할 때 인자를 받는 느낌으로 Key조건을 줄수가 있었다.

예시 퀘스트 테이블인데 User#imjae에 해당하는 questId가 m : 메인퀘스트이고 materials : 재료가 필요한, 01-03 퀘스트 넘버 의 퀘스트 리스트가 있고, isCleared는 해당 퀘스트를 완료했는지에 대한 값을 나타낸다.
private void PrintItem(Dictionary<string, AttributeValue> attributeList)
{
string t = null;
foreach (var kvp in attributeList)
{
string attributeName = kvp.Key;
AttributeValue value = kvp.Value;
t +=
(
"\n" + attributeName + " " +
(value.S == null ? "" : "S=[" + value.S + "]") +
(value.N == null ? "" : "N=[" + value.N + "]") +
("BOLL=[" + value.BOOL + "]") +
(value.SS == null ? "" : "SS=[" + string.Join(",", value.SS.ToArray()) + "]") +
(value.NS == null ? "" : "NS=[" + string.Join(",", value.NS.ToArray()) + "]")
);
}
Debug.Log(t);
}
와 같이 로그를 찍었고, 데이터가 알맞게 나오는 것을 확인할 수 있다.
