我正在使用使用gsi的dynamo db表,因此我可以通过其他属性(如果存在)进行查询。此属性将在流程中更新,因此在流程开始时所有项目都不具有此属性。添加到项目后,此属性将设置为gsi的主键。
除了我不能在不指定gsi主键的情况下插入新项的事实之外,一切都按预期进行。如果尚未设置主键,我希望gsi忽略该项目。我认为在指定投影属性时,可以使用选项INCLUDE来实现。显然我在这里弄错了,但我也不知道如何解决这个问题。
非常感谢您的帮助,而且我将不得不坚持使用dynamo数据库,因此包括该数据库在内的每个提示都将大有帮助!
编辑: 为了澄清-这些是我的属性:
我要添加带有以下字段的项目:
,然后添加gsi_id字段。
答案 0 :(得分:2)
您的问题的前提是
在不指定GSI主键的情况下,我无法插入新项目。
但是,我认为这个前提是不正确的。根据我的经验和文档,非常允许您在基本表中插入没有 GSI键属性的项目,并且该项目将添加到基本表中,但在索引-正是您想要发生的事情。
例如,这里是the documentation的摘录:
全局二级索引仅跟踪其关键属性实际存在的数据项。例如,假设您向GameScores表中添加了另一个新项目,但仅提供了必需的主键属性。 ...由于未指定TopScore属性,因此DynamoDB不会将此项目传播到GameTitleIndex。
请注意,这仅对 missing 属性有效。确实不允许您执行的操作是在GSI键属性中使用错误的 type 设置值。例如,如果GSI键属性定义为具有“数字”类型,则无法在该属性中设置字符串-更新操作会出现ValidationException
错误。但是让属性完全丢失是可以的。