我正在执行对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();
Outupt
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 } ] }