我们可以通过 AWS SDK 使用 GSI 删除 DynamoDB 中的项目吗?

Posted

技术标签:

【中文标题】我们可以通过 AWS SDK 使用 GSI 删除 DynamoDB 中的项目吗?【英文标题】:Can we delete item in DynamoDB using GSI by AWS SDK? 【发布时间】:2022-01-20 00:24:16 【问题描述】:

我有 GSI 表并尝试使用 GSI 删除项目,如下所示。 但我收到以下错误。

“提供的关键元素与架构不匹配”。

我尝试使用以下关键字进行查询并且成功了。 所以我已经确认提供的关键元素是正确的。 我试图搜索是否可以通过 GSI 进行删除操作,但找不到好的文档。

谁能告诉我使用 GSI 删除项目的最佳方法是什么?

async function deleteProject(projectDB:string,projectId:string):Promise<any>
  
  const params=
    TableName:projectDB,
    IndexName:'projectId-index',
    Key:
      'projectId':projectId,
    ,
    ExpressionAttributeNames:  '#a': 'projectId' ,
    ExpressionAttributeValues: ":val": projectId,
    ConditionExpression:"#a = :val",
  
  const result=await db.delete(params).promise();
  console.log('result',result);

  return result;

【问题讨论】:

【参考方案1】:

您不能通过二级索引删除项目。二级索引的作用类似于基表的只读视图,因此如果要删除数据,则必须将其从基表中删除。

理想情况下,您将基表中的关键属性投影到全局二级索引中。如果您想删除一个项目,您可以使用您在 GSI 中看到的值从基表中删除它。

注意:这将从基表中删除该项目,因此也会从所有二级索引中删除。

如果您只想从 GSI 中删除它,则需要从基表中的项目中删除用作 GSI 键的属性,然后它不会被复制到 GSI。

【讨论】:

表记录的关键属性总是自动包含在 GSI 中。 啊,是的 - 好点@Charles

以上是关于我们可以通过 AWS SDK 使用 GSI 删除 DynamoDB 中的项目吗?的主要内容,如果未能解决你的问题,请参考以下文章

使用 aws-sdk 终止实例后删除子网时发生 DependencyViolation

如何强制删除 S3 存储桶中的所有对象版本,然后最终使用 aws-sdk-go 删除整个存储桶?

ruby-aws-sdk 记录在删除后仍然存在

保护 AWS JS SDK Api 调用

AWS Ruby SDK - 删除应用程序和所有相关环境

使用AWS Android SDK发送JWT令牌