在 Dynamodb 索引中使用 set 作为主键
Posted
技术标签:
【中文标题】在 Dynamodb 索引中使用 set 作为主键【英文标题】:Using set as Primary Key in Dynamodb Index 【发布时间】:2019-09-10 12:11:21 【问题描述】:我创建了一个 Dynamodb 模型,其中我使用三个单独的 id 和另一个接受时间戳的属性的组合将一个属性设置为一个集合。想法是在这两个上创建一个 GIS 索引,其中 set 属性作为主键,时间戳作为排序键。在对 KeyConditionExpression 使用“相等”运算符时,我无法获取数据。不确定是什么问题。因此,如果有人可以指导我是遵循正确的方法还是遗漏了什么。
下面是设置属性值示例
"291447cb-f7a5-4627-9a7e-ac7b4adf9xce", "21", "d2e5723a-437a-4517-9f4b-1a62575224d6"
【问题讨论】:
请显示完整的记录和您用来查询的代码。 【参考方案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-ac7b4adf9xce:d2e5723a-437a-4517-9f4b-1a62575224d6") 并留下第三个值,即 21并且查询将返回其 Key 与上述字符串匹配的所有数据。我知道“包含”是一种方法,但它不适用于键值。 有两列:一列用于您在上面显示的串联,另一列用于“21”。这样,您可以使用"291447cb-f7a5-4627-9a7e-ac7b4adf9xce:d2e5723a-437a-4517-9f4b-1a62575224d6"
作为您的 GSI 哈希键,并使用21
作为排序键。 (很高兴它的工作)。
尝试了相同的方法并进行了一些更改。由于我在一个列中需要“291447cb-f7a5-4627-9a7e-ac7b4adf9xce”和“d2e5723a-437a-4517-9f4b-1a62575224d6”,并且必须按“ts”对它们进行排序,所以我为它创建了一个哈希键您建议将“ts”作为排序键,对于“21”,我将其用作FilterExpression。所以总共有 3 列,我正在获取数据。让我知道这是否是正确的方法。为这么多附带问题道歉。以上是关于在 Dynamodb 索引中使用 set 作为主键的主要内容,如果未能解决你的问题,请参考以下文章