使用多个排序键查询Dynamodb

时间:2020-01-19 06:08:31

标签: java amazon-dynamodb dynamodb-queries

如何查询按两个属性排序的发电机数据库?

例如,假设我的实体是github_repository。具有属性名称(S),所有者(S),手表(I),星星(I)和叉子(I)。

(S)-字符串:(I)-int

我想通过星号和叉子返回前10个github_repository。假设两个项目具有相同的星号,那么我将叉子用作排序中的决胜局。

谢谢

2 个答案:

答案 0 :(得分:1)

如果您知道如何对(星型,叉型)元组进行排序,则可以将其适当地序列化为字符串,并将其用作排序键。

在您的情况下,您说:

我想通过星号和叉子返回前10个github_repository。假设两个项目具有相同的星号,那么我将叉子用作排序中的决胜局。

因此,如果“星星”是0到9的数字,而“叉子”(?)也是0到9的数字,则只需将两个数字连接在一起就可以得到一个字符串。如果要反向排序,则取10位数字(最高的恒星优先)。例如,具有3星和6个叉子的项目将获得字符串“ 74”。如果一个项目的星级比另一个项目的星级多,它将排在排序的第一位。如果两个项目具有相同的星号,则第一个具有更多叉子的项目将是第一个。根据您的要求。

如果星号和叉子的含义不同,或者排序要求不同,则细节也会有所不同-但是在许多情况下,您可以找到一种方法来将要排序的内容编码为DynamoDB可以将其编码为单个字符串按字典顺序排序。

答案 1 :(得分:0)

您只能按一个键排序。对于您的问题,我可以想到两种解决方案:

  • 使用由星号和叉子组成的排序键(如果适合您的用例)。
  • 从头开始获取前十名,然后在本地使用分叉进行排序(但是如果nr 10的分叉少于nr 11,则可能会带来问题)。