[英]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。 一個鍵包括partitionKey
和sortKey
,我認為在您的情況下,您只需設置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.