在使用dynamodb进行实验时,我遇到了以下问题:
var request = new QueryRequest
{
TableName = "vs-configurator-engine-back-table",
KeyConditionExpression = "HashKey = :key and begins_with(SortKey, :sortKey)",
ExpressionAttributeValues = new Dictionary<string, Amazon.DynamoDBv2.Model.AttributeValue> {
{":key", new Amazon.DynamoDBv2.Model. AttributeValue { S = key }},
{":sortKey", new Amazon.DynamoDBv2.Model. AttributeValue { S = sort }},
},
};
其中键和排序:
var key = "modelyear#specialParam#Id#year#metadata";
string sort = "ruleset#";
这工作,但我不喜欢当阅读数据时,我必须检索如下值:
response.Items[0].TryGetValue("MyProp", out AttributeValue propOut);
我习惯了.NET到Mysql的世界,在那里我可以得到一个对象类作为结果,所以我尝试了这种方法:
[DynamoDBTable("myCoolTable")]
public class MyObject
{
[DynamoDBHashKey]
public string HashKey { get; set; }
public string SortKey { get; set; }
[DynamoDBProperty]
public DateTime activeFrom { get; set; }
[DynamoDBProperty]
public Guid id { get; set; }
}
public async Task<DateTime> GetData()
{
AmazonDynamoDBConfig clientConfig = new AmazonDynamoDBConfig();
AmazonDynamoDBClient client = new AmazonDynamoDBClient(clientConfig);
DynamoDBContext context = new DynamoDBContext(client);
MyObject obj = context.Load<MyObject>("modelyear#specialParam#Id#year#metadata");
}
执行此操作时,我收到一个错误:
无法转换属性SortKey的范围键值
我试图找出如何将sortkey发送到查询中,但也不太理解错误消息。
我希望将sorkey发送到查询中,但也能够在检索到它之后转换它的值。
1条答案
按热度按时间00jrzges1#
Load方法用于从表中检索单个项,因此需要提供整个主键、散列和范围键。
在后台,Load方法实际上是从原生AWS DynamoDB API调用GetItem操作,这意味着您不能使用begins_with或任何其他函数。
您需要使用
Query
,例如: