繁体   English   中英

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

[英]How to create dynamo db item without specifying gsi key

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

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

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

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

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

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

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

然后添加 gsi_id 字段。

你的问题的前提是

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM