DynamoDB UpdateException:要更新的属性类型不匹配

时间:2016-11-11 19:05:12

标签: amazon-dynamodb aws-sdk

我在DynamoDB中有以下记录:

    {
        "BusinessNo": {
            "N": "12345"
        },
        "Metadata": {
            "M": {
                "MimeType": {
                    "S": "audio/wav"
                },
                "FileName": {
                    "S": "00032329.wav"
                },
                "CustomC": {
                    "S": "baz"
                },
                "CustomA": {
                    "S": "foo"
                },
                "CustomB": {
                    "S": "bar"
                },
                "Size": {
                    "S": "3992020323"
                }
            }
        },
        "Id": {
            "S": "f0de8af3-a7f5-4d9b-ad5d-b2f150abd15e"
        },
        "Revision": {
            "N": "2"
        }
    }

但是当我使用来自nodejs AWS SDK的update DynamoDB.DocumentClient方法提交以下内容时(我还尝试了add而不是set):

{
  "TableName": "Storage_FileMetadata",
  "Key": {
    "Id": "f0de8af3-a7f5-4d9b-ad5d-b2f150abd15e",
    "BusinessNo": "12345"
  },
  "ExpressionAttributeNames": {
    "#m": "Metadata",
    "#k": "CustomD",
    "#r": "Revision"
  },
  "ExpressionAttributeValues": {
    ":r": 4,
    ":v": "doo-wop"
  },
  "UpdateExpression": "set #m.#k = :v",
  "ConditionExpression": "#r < :r"
}

我得到以下异常:

{
    "message": "Type mismatch for attribute to update",
    "code": "ValidationException",
    "time": "2016-11-11T18:55:01.543Z",
    "requestId": "b9d78c87-1c4d-400a-8968-d761b657cd53",
    "statusCode": 400,
    "retryable": false,
    "retryDelay": 0
}

我认为我遗漏了有关添加/更新嵌套属性的内容,但在阅读the docs之后我无法弄清楚是什么。

1 个答案:

答案 0 :(得分:5)

似乎您需要将值“BusinessNo”:“12345”作为数字发送

"Key": {
    "Id": "f0de8af3-a7f5-4d9b-ad5d-b2f150abd15e",
    "BusinessNo": 12345
}