【问题标题】:How to delete multiple rows in DynamoDB?如何删除 DynamoDB 中的多行?
【发布时间】:2021-08-04 21:39:59
【问题描述】:

我正在尝试从 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" );
    }
  });

【问题讨论】:

标签: node.js amazon-web-services amazon-dynamodb dynamodb-queries


【解决方案1】:

DynamoDB 中的项目(或行)由其主键唯一标识。一个表可以有一个简单的主键(一个 partition 键)或一个复合主键(一个 partition 键加上一个 sort 键)。

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

因此,如果您要删除满足特定条件的项目,例如 maxspeed

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2020-03-28
      • 1970-01-01
      • 1970-01-01
      • 2018-04-14
      • 2019-01-27
      • 1970-01-01
      • 2013-04-04
      • 1970-01-01
      • 2012-05-16
      相关资源
      最近更新 更多