在 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-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 列,我正在获取数据。让我知道这是否是正确的方法。为这么多附带问题道歉。

以上是关于在 Dynamodb 索引中使用 set 作为主键的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 DynamoDB 建模双键/二级索引约束?

dynamoDB 中全局二级索引范围键的最大值

DynamoDB:查询中的全局二级索引利用率

DynamoDB 静态加密

使用 dynamoDB 和用户组进行细粒度访问

使用节点js的地图中列表中特定索引处的Dynamodb sdk更新条目