我们可以通过 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