【问题标题】:Can we delete item in DynamoDB using GSI by AWS SDK?我们可以通过 AWS SDK 使用 GSI 删除 DynamoDB 中的项目吗?
【发布时间】: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;
}

【问题讨论】:

    标签: amazon-web-services amazon-dynamodb aws-sdk


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 表记录的关键属性总是自动包含在 GSI 中。
    • 啊,是的 - 好点@Charles
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-21
    • 1970-01-01
    • 2016-09-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多