首页 > 解决方案 > 如何在不指定 gsi 键的情况下创建 dynamo db 项目

问题描述

我正在使用使用 gsi 的 dynamo db 表,因此我可以通过附加属性进行查询(如果存在)。此属性将在流程中更新,因此所有项目在流程开始时都没有此属性。此属性在添加到项目时设置为 gsi 的主键。

除了指定 gsi 的主键我无法插入新项目之外,一切都按预期工作。如果尚未设置其主键,我希望 gsi 忽略该项目。在指定投影属性时,我认为使用 INCLUDE 选项可以做到这一点。显然我在这里弄错了,但我也不知道如何解决这个问题。

非常感谢任何帮助,而且我将不得不坚持使用 dynamo db,所以包括这个 db 在内的每一个提示都会有很大帮助!

编辑: 为了澄清 - 这些是我的属性:

我想添加一个带有以下字段的项目:

然后添加 gsi_id 字段。

标签: amazon-dynamodbamazon-dynamodb-indexamazon-dynamodb-data-modeling

解决方案


你的问题的前提是

如果不指定 GSI 的主键,我就无法插入新项目。

但是,我认为这个前提是不正确的。根据我的经验和文档,非常允许您将没有 GSI 键属性的项目插入到基表中,并且该项目将被添加到基表中但在索引中丢失 - 正是您想要的发生。

例如,这是文档中的一个片段:

全局二级索引仅跟踪其关键属性实际存在的数据项。例如,假设您向 GameScores 表添加了另一个新项目,但只提供了所需的主键属性。... 因为您没有指定 TopScore 属性,DynamoDB 不会将此项目传播到 GameTitleIndex。

请注意,这仅适用于缺少的属性。您真正不允许做的事情是在 GSI 键属性中设置错误类型的值。例如,如果 GSI 密钥属性定义为“数字”类型,则不能在该属性中设置字符串 -ValidationException更新操作会出错。但是完全缺少该属性是可以的。


推荐阅读