从AWS DynamoDB中的`ConditionalCheckFailedException`中获取更多详细信息?

ari*_*ing 2 amazon-web-services node.js amazon-dynamodb aws-lambda

在DynamoDB中,可以ConditionExpression在单个属性上设置如下:

ConditionExpression: 'attribute_exists(user_id)'
Run Code Online (Sandbox Code Playgroud)

如果此ConditionExpression是在更新中定义的,并且user_id不存在,则ConditionExpression的计算结果为false并返回异常:

message: 'The conditional request failed',
code: 'ConditionalCheckFailedException',
requestId: 'KPFMA7S5P110FCOMLPMKP15UDBVV4KQNSO6AEMVJF66Q9ASUAAJG',
statusCode: 400
Run Code Online (Sandbox Code Playgroud)

尽管只有一个条件可以评估所有情况,但所有条件都明确时,DynamoDB不会报告哪个条件失败:

ConditionExpression: 'attribute_exists(user_id) and iq = 85'
Run Code Online (Sandbox Code Playgroud)

那么异常与上述相同,因此无法说出是什么导致条件评估为假。

有没有办法(甚至是骇人听闻的)从异常信息中获取更多详细信息?

F_S*_*O_K 5

不幸的是,DynamoDB将不提供任何其他详细信息-它不会告诉您ConditionExpression的哪一部分失败。

我唯一想做的就是在运行更新表达式之前或之后立即执行查询,比较必要的属性,并记录结果。

如果在更新之前运行查询,则可以根据需要执行或跳过更新。实际上,您将实现自己的条件处理。

或者,您可以在更新try块之后将查询作为catch块的一部分执行,这样查询仅在更新失败时才运行。