如何在不指定 gsi 密钥的情况下创建发电机数据库项目

How to create dynamo db item without specifying gsi key

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

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

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

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

我想添加具有以下字段的项目:

然后添加 gsi_id 字段。

你提问的前提是

I cannot insert a new item without also specifying the primary key of the GSI.

但是,我认为这个前提是不正确的。根据我的经验和文档,您完全可以在基础 table 中插入一个没有 GSI 密钥属性的项目 ,并且该项目将被添加到基础 table 但在索引中缺失 - 正是您想要发生的事情。

例如,这是来自 the documentation 的片段:

A global secondary index only tracks data items where its key attributes actually exist. For example, suppose that you added another new item to the GameScores table, but only provided the required primary key attributes. ... Because you didn't specify the TopScore attribute, DynamoDB would not propagate this item to GameTitleIndex.

请注意,这仅适用于 缺失的 属性。确实不允许您做的事情是在 GSI 键属性中设置一个带有错误 type 的值。例如,如果 GSI 密钥属性定义为“数字”类型,则您不能在该属性中设置字符串 - 您将在更新操作中收到 ValidationException 错误。但是完全缺少该属性也没关系。