javascript - 使用 DynamoDB.DocumentClient 成功进行事务处理后,ItemCollectionMetrics 为空
问题描述
我正在对 DynamoDb 执行transactWrite
(https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB/DocumentClient.html#transactWrite-property)指令并期望返回ItemCollectionMetrics
(我ReturnItemCollectionMetrics: 'SIZE'
在请求中指定)。
{}
即使在 dynamo db 表上发生更改,该对象也会返回空。
有人对此有任何想法吗?
代码
const dynamoResponse = await dynamoDbDocumentClient.transactWrite({
TransactItems: [
{
Put: {
TableName: ENV.BLAH_CONTENT_COUNT_MESSAGES_TABLE,
ExpressionAttributeNames : {
'#v' : 'v',
},
ExpressionAttributeValues : {
':v' : blah.v
},
ConditionExpression: '(attribute_exists(blahId) AND #v<>:v) OR attribute_not_exists(blahId)',
Item: {...blahCountMessage}
}
},
{
Update: {
TableName: ENV.BLAH_CONTENT_COUNTS_TABLE,
Key: { id: blahContentCount.id },
ExpressionAttributeNames : {
'#v' : 'v',
'#count' : 'count',
'#contentId': 'contentId'
},
ExpressionAttributeValues : {
':v' : 1,
':count' : deleted ? -1: 1,
':contentId': blahContentCount.contentId,
':defaultNumber': 0
},
ConditionExpression: 'attribute_not_exists(cognitoId)',
UpdateExpression: 'SET #contentId = :contentId, #count = if_not_exists(#count, :defaultNumber) + :count, #v = if_not_exists(#v, :defaultNumber) + :v',
ReturnValuesOnConditionCheckFailure: 'ALL_OLD'
}
}
],
ReturnItemCollectionMetrics: 'SIZE'
}).promise();
输出
console.log(JSON.stringify(dynamoResponse.ItemCollectionMetrics)); // {}
谢谢!
解决方案
ReturnItemCollectionMetrics:
“有关受操作影响的项目集合(如果有)的信息。仅在请求请求时才返回 ItemCollectionMetrics。如果表没有任何本地二级索引,则不会在响应中返回此信息。”
每:https ://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_ItemCollectionMetrics.html
会不会是这个交易没有更新任何东西——或者你没有 LSI?
另请注意:文档说“全局表”的事务被禁用,我不确定它们是否意味着 GSI……但我没有使用 LSI,这可能也是为什么没有返回 ItemCollectionMetrics 的原因到我的交易。
如果您更新参数对象以包含 ReturnConsumedCapacity: 'TOTAL'
响应对象,则应如下所示:
[ { TableName: 'table_name',
CapacityUnits: 8,
WriteCapacityUnits: 8 } ] }
推荐阅读
- python - 学习率调度器和优化器之间有什么关系?
- compare - 仅从一个列表中删除重复项
- flutter - 如何限制 `Scaffold` 的宽度和高度(适用于 Web 和桌面)
- rust - cargo rust 构建脚本 - 打印命令输出
- android - ApplyParsedPerms:lsetfilecon of /system/lost+found 到 u:object_r:system_set_metadata_recursive:一些更改失败
- python - 有没有更有效的方法来找到这个对象的轮廓并填充python中的空白?
- python-3.8 - 无法更新字典
- php - 从今天开始循环以从一组模板生成班次/轮班列表
- c# - 设置 resx 文件的自定义工具命名空间属性时,IStringLocalizer 不起作用
- go - 实现 Go 接口时如何处理重复性和灵活性?