我有一个具有以下键结构的DynamoDb表,
Hash Range
string string|string|timestamp(string)
12345 ABC|DEF|123456789
我希望能够获得时间戳等于或小于范围键中时间戳部分的项目,但是我不确定我的实现是否正确,或者不确定是否存在这种情况不起作用,所以我想征求第二意见。
这是我的实现:
var asyncSearch = _dynamoDbContext.QueryAsync<PricingModel>(entityKeyId,
new DynamoDBOperationConfig
{
OverrideTableName = _config.Value.PricingModelTableNameOverride,
QueryFilter = new List<ScanCondition>
{
new ScanCondition(nameof(PricingModel.EntityKeyId),
ScanOperator.Equal,
entityKeyId),
new ScanCondition(nameof(PricingModel.SortKeyId),
ScanOperator.LessThanOrEqual,
sortKeyId)
}
});
答案 0 :(得分:1)
这里几乎没有什么信息(例如,范围键的其他组件是什么,以及它们将用于什么)。但是,您似乎需要将时间戳记的位置移到范围键的开头。
DynamoDB将通过范围键对分区键中的项目进行排序。如果希望它们按日期排序,则需要时间戳作为范围键的第一部分。
由于范围键是一个字符串,因此请确保选择一个自然排序为字符串的日期格式。
编辑:ISO 8601字符串(例如2019-04-11T11:37:00Z)自然可以作为字符串进行排序,并且易于阅读。
编辑:然后,您可以使用LT关键条件运算符小于,并使用BEGINS_WITH获得确切的时间戳记