亚马逊DynamoDB和按日期过滤。

9

我有一个DynamoDB表,其中有一个GlobalSecondaryIndex,其键类型为“range”,其中日期字段为属性。值以ISO格式“YYYY-MM-DD”存储。 我想在节点中访问仅具有大于某个日期的记录。 似乎可以使用查询参数来实现:

KeyConditionExpression: 'myDate >= :myDate',
ExpressionAttributeValues: {   
    ':myDate': '2017-11-17'
}

然而我并不完全理解。日期在技术上说是一个字符串。信任字符串比较可靠吗?还是应该用其他方式来完成?

2个回答

9

如果日期格式存储为YYYY-MM-DD,那么可以放心使用。

DynamoDB没有单独的日期数据类型。日期可以存储为字符串或数字。

Date    S (string type). The Date values are stored as ISO-8601 formatted strings.

将日期存储为字符串:

您可以使用字符串数据类型来表示日期或时间戳。其中一种方法是使用ISO 8601字符串,如以下示例所示:

  • 2016-02-15

  • 2015-12-21T17:42:34Z

  • 20150311T122706Z

将日期存储为数字:

您可以使用数字数据类型来表示日期或时间戳。其中一种方法是使用纪元时间——自1970年1月1日UTC 00:00:00以来的秒数。例如,纪元时间1437136300表示2015年7月17日UTC 12:31:40。

数据类型


3
好的,我明白了。但是在我的例子中,myDate >= :myDate 是基于字符串比较的,对吗?假设有两个日期2016-02-15和2016-02-14,第一个日期更大,因为最后一位数字“5”比“4”大,对吗? - Thomas Seehofchen
似乎纪元时间是最好的解决方案。 - EhsanR

1

在 DynamoDB 表中使用这种方法进行日期过滤,对我来说很有效。

{
TableName: your-table-name ,
FilterExpression: '#attr2 BETWEEN :start_date AND :end_date',
ExpressionAttributeNames: {
      '#attr2': 'created_at',
},
ExpressionAttributeValues: {
      ':start_date': `2021-04-01T00:00:00`,
      ':end_date': `2021-04-05T23:59:59`
}

我希望这对于AWS的新手有所帮助


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接