如何删除DynamoDB中的多行?

Dha*_*dra 2 amazon-web-services node.js amazon-dynamodb dynamodb-queries

我正在尝试从 DynamoDB 表中删除数据。

如果我使用分区键删除数据,它会起作用。

但是当我使用任何其他字段删除多行时,它会失败。

  var params = {
    TableName: "test",
    Key: {
      dmac: dmac,
    },
    ConditionExpression: "dmac= :dmac"
  };

  docClient.delete( params, (error) => {
    if (error) {
      console.log( "Delete data fail" );
    } else { 
      console.log( "Delete data Success" );
    }
  });
Run Code Online (Sandbox Code Playgroud)

jar*_*mod 6

DynamoDB 中的项目(或行)由它们的主键唯一标识。一个表可以有一个简单的主键(一个分区键)或一个复合主键(一个分区键加一个排序键)。

要删除项目,您必须提供完整的主键(无论是简单分区键还是复合分区键加排序键)。

因此,如果您想删除满足特定条件的项目,例如 maxspeed < 120 的汽车,则发出查询或扫描以识别这些项目,检索主键,然后在第二个操作中删除这些项目。

要删除单个项目,请使用DeleteItem。要删除多个项目,请使用BatchWriteItem。尽管命名为BatchWriteItem,但它可用于放置多个项目或删除多个项目,并且您可以在同一个 API 调用中定位一个或多个 DynamoDB 表。

  • BatchWriteItem 这里确实需要一个例子。提供链接并不理想。 (2认同)
  • @Houman 好主意,添加了 v2 和 v3 示例。 (2认同)

Ita*_*man 3

在 DynamoDB 中,您只能使用其键(即:分区键和排序键,如果在表中定义)来删除项目。例如,该Key属性是操作的规范规范中必需的属性这一事实强调了这一点delete。请参阅: https: //docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_DeleteItem.html#DDB-DeleteItem-request-Key

这意味着,如果您想使用其他属性删除项目,则必须首先通过您拥有的属性查找该项目,从返回的项目中提取键,然后使用该键删除该项目。

“通过不是项目键的属性查找项目”的标准解决方案是在表上定义全局二级索引 (GSI),并将这些属性定义为 GSI 的键。