DynamoDB更新操作中的ConditionExpression提供未知错误

问题描述

我正在DynamoDB表中浏览很多项目,如果该项目包含某个字段(这是一个对象),我想在该字段上的对象上设置一些属性。

我尝试了两种代码变体,但是它们都给了我以下未指定的错误

{
    "errorType": "ConditionalCheckFailedException","errorMessage": "The conditional request failed","code": "ConditionalCheckFailedException","message": "The conditional request failed","time": "2020-08-29T11:44:11.703Z","requestId": "IAN8A31FN2F1HR0ORT1RMTH5ENVV4KQNSO5AEMVJF66Q9ASUAAJG","statusCode": 400,"retryable": false,"retryDelay": 26.45456917481479,"stack": [
        "ConditionalCheckFailedException: The conditional request failed","    at Request.extractError (/var/runtime/node_modules/aws-sdk/lib/protocol/json.js:51:27)","    at Request.callListeners (/var/runtime/node_modules/aws-sdk/lib/sequential_executor.js:106:20)","    at Request.emit (/var/runtime/node_modules/aws-sdk/lib/sequential_executor.js:78:10)","    at Request.emit (/var/runtime/node_modules/aws-sdk/lib/request.js:688:14)","    at Request.transition (/var/runtime/node_modules/aws-sdk/lib/request.js:22:10)","    at AcceptorStateMachine.runTo (/var/runtime/node_modules/aws-sdk/lib/state_machine.js:14:12)","    at /var/runtime/node_modules/aws-sdk/lib/state_machine.js:26:10","    at Request.<anonymous> (/var/runtime/node_modules/aws-sdk/lib/request.js:38:9)","    at Request.<anonymous> (/var/runtime/node_modules/aws-sdk/lib/request.js:690:12)","    at Request.callListeners (/var/runtime/node_modules/aws-sdk/lib/sequential_executor.js:116:18)"
    ]
}

这是带有命名属性的代码


          const itemParams = {
            TableName: process.env.vehiclesTableName,Key: { vehicleId },UpdateExpression:
              'set #learned.#versionId = :versionId,#learned.#fileFormat = :fileFormat',ExpressionAttributeValues: {
              ':versionId': VersionId,':fileFormat': fileFormat,},ConditionExpression: 'attribute_exists(#learned)',ExpressionAttributeNames: {
              '#learned': 'learned','#versionId': 'versionId','#fileFormat': 'fileFormat',}
          await db.update(itemParams).promise()



并且没有命名属性

          const itemParams = {
            TableName: process.env.vehiclesTableName,UpdateExpression:
              'set learned.versionId = :versionId,learned.fileFormat = :fileFormat',ConditionExpression: 'attribute_exists(learned)',}
          await db.update(itemParams).promise()

它们的行为相同。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)