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
对象。一个键包括 partitionKey
和 sortKey
,我想你的情况,你只需设置 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()
我正在处理一个查询,我需要使用 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
对象。一个键包括 partitionKey
和 sortKey
,我想你的情况,你只需设置 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()