DynamoDB:查询所有数据并按日期降序排序

Zal*_*ali 6 amazon-web-services amazon-dynamodb aws-lambda

我是 AWS DynamoDB 的新手,需要这里专家的指导。

我正在创建一个应用程序,该应用程序将显示一个事件列表,条件是事件日期必须大于今天日期,并按事件日期降序排列。我的表架构如下:

分区键 = eventid

排序键 = 事件日期

如果我使用关系数据库,我可以使用“SELECT * FROM events where eventdate > todaydate ORDERBY eventdate DESC”,但是我想如何使用 AWS DynamoDB 实现这一点?我希望使用 QUERY 而不是 SCAN。

not*_*est 1

不幸的是,您无法使用查询 API 实现上述用例。

理由:-

  • 您需要大于比较运算符。非相等比较运算符可以使用FilterExpression或 在排序键属性上使用KeyConditionExpression

  • 在上面的用例中,您没有eventId,因此无法使用 KeyConditionExpression。即使您使用eventDate哈希键创建 GSI,也不能在哈希键上使用非等式运算符,并且除了排序键之外的任何属性都无法进行排序。因此,使用GSI选项无法达到排序要求。

针对上述用例使用查询 API 的解决方案:-

  • 创建一个 GSI,其哈希键为eventDate

  • 使用 Query API 查询索引eventDate

  • eventDate在客户端对数据进行排序。大多数编程语言都有良好的排序 API。您可以在客户端轻松实现这一点

笔记:-

  • 您无法同时实现排序和使用查询 API 要求,尤其是在不知道主表的哈希键的情况下

  • @notionquest,请注意,使用查询 API,您可以使用 ScanIndexForward 参数通过排序键以正向或反向顺序获取结果。 (2认同)