javascript - 使用 DynamoDB.DocumentClient 成功进行 transactWrite 后,ItemCollectionMetrics 为空

标签 javascript amazon-web-services amazon-dynamodb documentclient

我正在执行transactWrite ( https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB/DocumentClient.html#transactWrite-property ) 向 DynamoDb 发出指令并期望返回 ItemCollectionMetrics (我在请求中指定 ReturnItemCollectionMetrics: 'SIZE')。

对象返回空 {}即使 dynamo 数据库表上发生了更改。

有人对此有什么想法吗?

代码

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

谢谢!

最佳答案

返回项目集合指标:

“有关受操作影响的项目集合的信息(如果有)。仅当请求要求时才返回 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 } ] }


关于javascript - 使用 DynamoDB.DocumentClient 成功进行 transactWrite 后,ItemCollectionMetrics 为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58590816/

相关文章:

javascript - 使用 jquery 1.4 或 javascript 如何使用变量定位特定链接

python - 如何使用 Boto 列出所有正在运行的 EMR 集群?

java - XML 解析错误 javascript servlet

javascript - 模糊事件.relatedTarget 返回 null

javascript - 函数调用其他函数练习我被难住了

amazon-web-services - │ 错误 : Reference to undeclared resource

amazon-web-services - 为什么通过 cdk 向 dynamodb 表添加二级索引需要重新创建该表?

amazon-dynamodb - 如何动态更新 dynamodb 项目中的属性?

amazon - DynamoDB 是否仍然遵循 CAP 定理及其 "Strong Consistency" promise ?

amazon-web-services - 为什么我的 DynamoDB 扫描速度如此之快,而且只有 1 个预配置的读取容量单位?