我们可以通过 AWS SDK 使用 GSI 删除 DynamoDB 中的项目吗?
Can we delete item in DynamoDB using GSI by AWS SDK?
我 table 使用 GSI 并尝试使用 GSI 删除项目,如下所示。
但是我收到以下错误。
"The provided key element does not match the schema".
我尝试使用以下关键字进行查询并成功了。
所以我已经确认提供的关键元素是正确的。
我试图搜索是否可以通过 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;
}
您不能通过二级索引删除项目。二级索引的作用类似于基 table 的 只读视图,因此如果要删除数据,则必须从基 table 中删除它].
理想情况下,您可以将基础 table 中的关键属性投射到全球二级索引中。如果你想删除一个项目,你可以使用你在 GSI 中看到的值从基础 table 中删除它。
注意: 这将从基础 table 中删除该项目,因此也会从所有二级索引中删除该项目。
如果您只想从 GSI 中删除它,则需要从基础 table 中的项目中删除用作 GSI 键的属性,然后它不会被复制到 GSI。
我 table 使用 GSI 并尝试使用 GSI 删除项目,如下所示。
但是我收到以下错误。
"The provided key element does not match the schema".
我尝试使用以下关键字进行查询并成功了。
所以我已经确认提供的关键元素是正确的。
我试图搜索是否可以通过 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;
}
您不能通过二级索引删除项目。二级索引的作用类似于基 table 的 只读视图,因此如果要删除数据,则必须从基 table 中删除它].
理想情况下,您可以将基础 table 中的关键属性投射到全球二级索引中。如果你想删除一个项目,你可以使用你在 GSI 中看到的值从基础 table 中删除它。
注意: 这将从基础 table 中删除该项目,因此也会从所有二级索引中删除该项目。
如果您只想从 GSI 中删除它,则需要从基础 table 中的项目中删除用作 GSI 键的属性,然后它不会被复制到 GSI。