You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Node.js更新DynamoDB表触发保留关键字hash错误如何解决

问题原因

hash属于DynamoDB的预设保留关键字,不允许直接在UpdateExpression中作为属性名使用,所以触发了ValidationException校验异常。

修复方案

使用DynamoDB提供的ExpressionAttributeNames参数给属于保留关键字的属性名定义别名,用别名在表达式中代替实际属性名即可。

修改后的参数配置如下:

var params = {
    TableName: table,
    Key:{
        "email": email
    },
    // 用别名#h代替实际属性名hash
    UpdateExpression: "set #h = :var",
    // 定义别名和实际属性名的映射关系
    ExpressionAttributeNames:{
        "#h": "hash"
    },
    ExpressionAttributeValues:{
        ":var": hash
    },
    ReturnValues:"UPDATED_NEW"
};

另外你代码中还有一处回调参数顺序的问题可以同步修复:docClient.update的回调函数标准顺序是(err, data),现有代码中操作成功的回调逻辑里写的是callback(data, null),和你定义的updateData入参callback(err, data)的顺序不一致,会导致调用方拿到的结果错位,建议修改为:

docClient.update(params, function(err, data) {
    if (err) {
        console.error("Unable to update item. Error JSON:", JSON.stringify(err, null, 2));
        callback(err, null);
    } else {
        // 调整参数顺序,第一个参数为错误位,第二个为返回数据
        callback(null, data);
    }
});

对应的updateData调用处也同步调整回调参数顺序:

updateData('joejava@icloud.com', 'hash', function(err, data){
    console.log(err, data);
})

内容的提问来源于stack exchange,提问作者Kaguei Nakueka

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 14:54:05