gpt4 book ai didi

javascript - 为什么我需要从 DynamoDB 解析数字的 parseInt?

转载 作者:行者123 更新时间:2023-11-29 18:53:10 25 4
gpt4 key购买 nike

上周我一直在玩弄 AWS,并开始创建 Lambda 并使用 DynamoDB。

我花了好几个小时试图弄清楚为什么我会遇到可怕的The provided key element does not match the schema 错误,我终于崩溃并投入了1 而不是 id。令我震惊的是,Lambda 终于成功了。更多的玩弄,我发现我需要做 parseInt(id)

有人可以解释一下原因吗?下面是我用于更新列的简单 Lambda。

var AWS = require('aws-sdk');
AWS.config.update({region: 'us-east-1'});

var ddb = new AWS.DynamoDB;
var docClient = new AWS.DynamoDB.DocumentClient();

function updateField(id) {
var params = {
TableName: 'MyTable',
Key: {
'Id': parseInt(id)
},
UpdateExpression: `SET #c = :val`,
ExpressionAttributeNames: {
'#c': 'MyField'
},
ExpressionAttributeValues: {
":val": 1
},
ReturnValues: "UPDATED_NEW"
};

docClient.update(params, function(err, data) {
if (err) {
console.error("Unable to update item. Error JSON:", JSON.stringify(err, null, 2));
} else {
console.log("Updated");
}
});
}

exports.handler = function(event, context) {
ddb.scan({
TableName: 'MyTable',
Limit: 1
}, function(err, data) {
if (err) {
console.log("Error", err);
} else {
var item = data.Items[0];
updateField(item.Id.N);
}
});
};

我正在读取 DynamoDB 中的 Id 值并使用 N 属性。为什么我需要将它解析为 int 以重用它?这是我没能理解 JavaScript 中如此简单的事情,还是 DynamoDB 做了我意想不到的事情?

//Works
Key: {
'Id': parseInt(id)
}
//Does not work even though id came right from the database
Key: {
'Id': id
}

最佳答案

直接来自AWS.DynamoDB的回复有很大区别和 AWS.DynamoDB.DocumentClient .简而言之,前者将数字作为字符串返回,而后者将数字作为数字返回。

您正在使用两者,而您可能应该只使用一个来避免此类问题。

var ddb = new AWS.DynamoDB;
var docClient = new AWS.DynamoDB.DocumentClient();

DocumentClient简化“纯”DynamoDB 调用。来自其 documentation :

[DocumentClient] annotates native JavaScript types supplied as input parameters, as well as converts annotated response data to native JavaScript types.

但是,当您将它用于您的 update 时, 你没有使用 DocumentClient供您扫描。相反,您直接使用 AWS.DynamoDBddb.scan() .这将返回与 DocumentClient 不同(并且有点违反直觉)格式的结果。特别是,来自其 documentation (查看“响应语法”下),我们看到数字作为字符串返回:

"N": "string"

因此,您可以继续将字符串转换为数字,或者最好换成使用 DynamoDB.DocumentClient 与 DynamoDB 进行所有常见交互。因为它是为更好地与 Node/Javascript 集成而设计的。

关于javascript - 为什么我需要从 DynamoDB 解析数字的 parseInt?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50420024/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com