如何在不指定gsi键的情况下创建dynamo数据库项目

问题描述

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

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

非常感谢您的帮助,而且我将不得不坚持使用dynamo数据库,因此包括该数据库在内的每个提示都将大有帮助!

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

  • id(主键:必填)
  • 名称(属性)
  • 年份(属性)
  • gsi_id(GSI主键:可选)

我要添加带有以下字段的项目:

  • id(主键:必填)
  • 名称(属性)
  • 年份(属性)

,然后添加gsi_id字段。

解决方法

您的问题的前提是

在不指定GSI主键的情况下,我无法插入新项目。

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

例如,这里是the documentation的摘录:

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

请注意,这仅对 missing 属性有效。确实不允许您执行的操作是在GSI键属性中使用错误的 type 设置值。例如,如果GSI键属性定义为具有“数字”类型,则无法在该属性中设置字符串-更新操作会出现ValidationException错误。但是让属性完全丢失是可以的。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...