簡體   English   中英

AWS DynamoDB Transact Write 使用數組上的 IN 運算符

[英]AWS DynamoDB Transact Write using IN operator on Array

我正在處理一個查詢,我需要使用 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
                        }
                    }
                }]
            }

已經嘗試過: 回答它與我的問題不同

如果有人有任何問題,我會回答。 任何幫助都會非常有幫助。 謝謝

在這種情況下,您不能使用IN運算符 - Update 使用update運算符,您必須將鍵值放入Update object。 一個鍵包括partitionKeysortKey ,我認為在您的情況下,您只需設置partitionKey

要按 ID 更新多個項目,您可以將多個 Update object 放入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()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM