是否可以使用 AWS DynamoDB 在 GSI 上使用条件表达式批量写入?

RTF*_*RTF 2 amazon-web-services amazon-dynamodb

在使用全局二级索引的值作为条件表达式的同时,是否可以批量写入 DynamoDB(使用 Java SDK v1.11.1 和文档 API)?

例如,我想发出一个批量更新请求,该请求将更新 GSIMyIndex等于某个值的任何项目的属性 A、B 和 C。

这是可能的,还是我必须对 GSI 进行查询并使用生成的主键进行批量写入?

Joh*_*nes 8

几样东西:

  • 查询必须针对表/索引的主键(因此不能加入 GSI)
  • 据我所知,您不能将 ConditionalExpressions 添加到 batchWriteItem。
  • batchWriteItem 无法更新。(请参阅此处的第一个注释

我会做这样的事情:

// Get keys from GSI
dynamodb.query({
  IndexName: 'index',
  TableName: 'table',
  KeyConditionExpression: 'some expression',
}, (error, rows) =>
// Spin up a bunch of update requests
Promise.all(rows.Items.map((row) => dynamodb.update({
  ExpressionAttributeValues: {
    ':aVal': 'new value for a',
    ':bVal': 'etc',
    ':cVal': 'etc',
  },
  IndexName: 'index',
  Key: {
    primaryKey: row.primaryKey,
  },
  KeyConditionExpression: 'primaryKey = :primKey',
  UpdateExpression: 'set a = :aVal, b = :bVal, c = :cVal',
}).promise())));
Run Code Online (Sandbox Code Playgroud)