[在阵列上使用IN运算符的AWS DynamoDB Transact Write

问题描述 投票:0回答:1

我正在处理一个查询,我需要使用dynamoDB的TrasactWrite并在其中一个表上执行更新查询。

场景是我拥有唯一ID数组,我需要对数组中的每个ID执行相同的更新操作,并在不使用Loop或map的情况下更改表中的一个标志。

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

这是我的示例代码:

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
                        }
                    }
                }]
            }

已经尝试过:Answer与我的问题不同

如果有人有任何疑问,我会回答。任何帮助都会非常有帮助。谢谢

node.js amazon-web-services amazon-dynamodb in-operator
1个回答
0
投票

在这种情况下,您不能使用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: {
        partitionKey: 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()
© www.soinside.com 2019 - 2024. All rights reserved.