DynamoDb查询存储的日期
DynamoDb查询存储的日期
我有一个解析模板,它将从appsync查询中获取开始日期作为日期。但是我的日期保存在Dynamo中具有日期时间戳。我们如何在没有时间的情况下比较这两个日期。以下是我的解析器模板查询:\n{\n \"version\": \"2018-05-29\",\n \"operation\": \"Query\",\n \"query\": {\n \"expression\": \"Id = :Id and startDate =:date\",\n \"expressionValues\": {\n \"#set( $Id = $util.dynamodb.toDynamoDBJson(\\\"fixture#${ctx.args.input.Id}\\\") )\": \"$Id\",\n \"#set( $date = $util.dynamodb.toDynamoDBJson($ctx.args.input.date) )\": \"$date\"\n }\n }\n}\n
DynamoDB在处理日期时存在问题。根据您的需求,根据DynamoDB中的时间戳格式,有两种方法可以实现这一目标。
1- 如果您将时间戳存储为“自纪元以来的毫秒/秒”,您可以使用以下方法将AWSDate(即ISO8601)转换为自纪元以来的毫秒/秒时间戳:
$util.time.parseISO8601ToEpochMilliSeconds("2018-02-01T17:21:05.180+08:00")
,
然后使用过滤器 BETWEEN :startDate AND :endDate
根据输入日期查询您的表。
请注意,
endDate(秒)= startDate + 86400
或
endDate(毫秒)= startDate + 86400000
2- 如果您使用时间戳的字符串表示形式,则可能需要添加带有日期字段的全局二级索引(GSI),该字段作为键类型“range”的属性。关于这个问题有一些非常好的解释和建议解决方案在这个链接,这个链接和这个链接中。
希望这能帮到您。