ItemCollectionMetrics пусто после успешного transactWrite, используя DynamoDB.DocumentClient - PullRequest
0 голосов
/ 28 октября 2019

Я выполняю transactWrite (https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB/DocumentClient.html#transactWrite-property) инструкцию для DynamoDb и ожидаю возврата ItemCollectionMetrics (я указываю ReturnItemCollectionMetrics: 'SIZE' в запросе).

Объект возвращаетсяпусто {} даже если изменения произошли в таблицах динамо-базы данных.

У кого-нибудь есть идеи по этому поводу?

Код

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)); // {}

Спасибо!

1 Ответ

1 голос
/ 29 октября 2019

ReturnItemCollectionMetrics:

"Информация о коллекциях элементов, если таковые имеются, которые были затронуты операцией. ItemCollectionMetrics возвращается только в случае запроса на него. Если таблица не имеет никаких локальных вторичных индексов, этоинформация не возвращается в ответе. "

Per: https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_ItemCollectionMetrics.html

Может быть, эта транзакция либо ничего не обновляет, либо у вас нет LSI?

Также примечание: в документации сказано, что транзакции отключены для «глобальных таблиц», я не совсем уверен, имеют ли они значение GSI ... но я не использую LSI, что может также послужить причиной отсутствия ItemCollectionMetrics. вернулся в ответ на мои транзакции.

Если вы обновите свой объект параметра, включив в него ReturnConsumedCapacity: 'TOTAL', объект ответа должен выглядеть следующим образом:

   [ { TableName: 'table_name',
       CapacityUnits: 8,
       WriteCapacityUnits: 8 } ] }


...