DynamoDB UpdateException:类型不匹配的属性以进行更新

Mar*_*ler 5 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"
        }
    }
Run Code Online (Sandbox Code Playgroud)

但是,当我使用来自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"
}
Run Code Online (Sandbox Code Playgroud)

我得到以下异常:

{
    "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
}
Run Code Online (Sandbox Code Playgroud)

我认为我缺少有关添加/更新嵌套属性的信息,但是在阅读文档后我无法弄清楚是什么。

小智 7

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

"Key": {
    "Id": "f0de8af3-a7f5-4d9b-ad5d-b2f150abd15e",
    "BusinessNo": 12345
}
Run Code Online (Sandbox Code Playgroud)