AWS DynamoDB Transact Write 在数组上使用 IN 运算符

AWS DynamoDB Transact Write using IN operator on Array

我正在处理一个查询,我需要使用 dynamoDB 的 TrasactWrite 并在我的 table.

之一上执行更新查询

场景是我有一组唯一 ID,我需要对数组中的每个 ID 执行相同的更新操作,并更改 table 中的一个标志,而不使用循环或映射。

但是我很难找到与如何在 ID 上使用 IN 运算符相关的示例或文档,这些 ID 是 transactWrite 的关键参数中的主键。

这是我的示例代码:

let IDs = await find('table', { type: 'some_type' }, 'type-index}
let params = {
                TransactItems: [{
                    Update: {
                        TableName: 'table',
                        Key: '#_id IN :IDs,
                        UpdateExpression: 'set #flag = :flag',
                        ExpressionAttributeNames: {
                            '#flag': 'flag',
                            '#_id': '_id'
                        },
                        ExpressionAttributeValues: {
                            ':flag': false,
                            ":IDs": IDs
                        }
                    }
                }]
            }

已经试过:跟我的问题不一样

大家有什么问题我都会回答的。任何帮助都会非常有帮助。谢谢

在这种情况下您不能使用 IN 运算符 - Update。使用 update 运算符,您必须将键值放入 Update 对象。一个键包括 partitionKeysortKey,我想你的情况,你只需设置 partitionKey.

要通过 ID 更新多个项目,您可以将多个更新对象放入 TransactItems

let IDs = await find('table', { type: 'some_type' }, 'type-index');

let params = {
  TransactItems: [], // init empty array
}

IDs.forEach((ID) => {// loop though IDs array
  params.TransactItems.push({
    Update: {
      TableName: 'table',
      Key: {
        '_id': ID, // ID value
      },
      UpdateExpression: 'set #flag = :flag',
      ExpressionAttributeNames: {
        '#flag': 'flag',
        // '#_id': '_id' // remove this line
      },
      ExpressionAttributeValues: {
        ':flag': false,
        // ":IDs": IDs // remove this line
      }
    }
  })
});
// await client.transactWrite(params).promise()