首页 > 解决方案 > 使用 DynamoDB.DocumentClient 成功进行事务处理后,ItemCollectionMetrics 为空

问题描述

我正在对 DynamoDb 执行transactWritehttps://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)); // {}

谢谢!

标签: javascriptamazon-web-servicesamazon-dynamodbdocumentclient

解决方案


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 } ] }



推荐阅读