【问题标题】:Using set as Primary Key in Dynamodb Index在 Dynamodb 索引中使用 set 作为主键
【发布时间】:2019-09-10 12:11:21
【问题描述】:

我创建了一个 Dynamodb 模型,其中我使用三个单独的 id 和另一个接受时间戳的属性的组合将一个属性设置为一个集合。想法是在这两个上创建一个 GIS 索引,其中 set 属性作为主键,时间戳作为排序键。在对 KeyConditionExpression 使用“相等”运算符时,我无法获取数据。不确定是什么问题。因此,如果有人可以指导我是遵循正确的方法还是遗漏了什么。

下面是设置属性值示例

{ "291447cb-f7a5-4627-9a7e-ac7b4adf9xce", "21", "d2e5723a-437a-4517-9f4b-1a62575224d6" }

【问题讨论】:

  • 请显示完整的记录和您用来查询的代码。

标签: python-3.x amazon-dynamodb boto3 dynamodb-queries


【解决方案1】:

DynamoDB can only use keys of scalar types (single value string, number or binary)。您可以做的是将值连接到您的键的字符串中(例如"291447cb-f7a5-4627-9a7e-ac7b4adf9xce:21:d2e5723a-437a-4517-9f4b-1a62575224d6")。

不要忘记,您需要在表中存储此连接键,以便在您的 GSI 中使用它。并且您需要确保它已根据您的要求更新/与集合保持同步。

【讨论】:

  • 欣赏答案。它正在工作。附带问题,我想知道是否有一种方法可以执行类似 ("291447cb-f7a5-4627-9a7e-a​​c7b4adf9xce:d2e5723a-437a-4517-9f4b-1a62575224d6") 并留下第三个值,即 21并且查询将返回其 Key 与上述字符串匹配的所有数据。我知道“包含”是一种方法,但它不适用于键值。
  • 有两列:一列用于您在上面显示的串联,另一列用于“21”。这样,您可以使用"291447cb-f7a5-4627-9a7e-ac7b4adf9xce:d2e5723a-437a-4517-9f4b-1a62575224d6" 作为您的 GSI 哈希键,并使用21 作为排序键。 (很高兴它的工作)。
  • 尝试了相同的方法并进行了一些更改。由于我在一个列中需要“291447cb-f7a5-4627-9a7e-a​​c7b4adf9xce”和“d2e5723a-437a-4517-9f4b-1a62575224d6”,并且必须按“ts”对它们进行排序,所以我为它创建了一个哈希键您建议将“ts”作为排序键,对于“21”,我将其用作FilterExpression。所以总共有 3 列,我正在获取数据。让我知道这是否是正确的方法。为这么多附带问题道歉。
猜你喜欢
  • 2013-08-22
  • 2012-04-29
  • 1970-01-01
  • 1970-01-01
  • 2018-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多