gpt4 book ai didi

node.js - 无法更新 Dynamodb 表,出现 ValidationException

转载 作者:太空宇宙 更新时间:2023-11-03 21:56:05 29 4
gpt4 key购买 nike

我需要仅使用分区键来更新我的 dynamo 数据库表。但我得到了验证异常(exception)。我创建了一个包含 3 个字段的表。

  1. id(分区键)
  2. 名称(排序键)
  3. 年龄

然后我尝试仅使用 id 更新年龄字段。(尝试将年龄 30 修改为 40)这是我的代码

var AWS = require("aws-sdk");

AWS.config.update({
region: "us-east-1",

});

var params = {
TableName: 'test',
Key: { id: '100' },
UpdateExpression: 'set #age = :age ',
ConditionExpression: '#age = :testAge',
ExpressionAttributeNames: { '#age': 'age' },
ExpressionAttributeValues: { ':age': '40', ':testAge': '30' }
};

var docClient = new AWS.DynamoDB.DocumentClient();
docClient.update(params, function (err, data) {
if (err) {
console.log(err);
}
else {
console.log(data);
}
});

但是我遇到了这样的错误。

{ [ValidationException: The provided key element does not match the schema]
message: 'The provided key element does not match the schema',
code: 'ValidationException',
time: Thu Nov 17 2016 22:38:01 GMT+0530 (IST),
requestId: '34PNMFM6CEACQIRHTSV77OI0JRVV4KQNSO5AEMVJF66Q9ASUAAJG',
statusCode: 400,
retryable: false,
retryDelay: 0 }

出现错误后,我像这样修改了我的 params 变量

 var params = {
TableName: 'test',
Key: { id: '100',name: 'manaf' },
UpdateExpression: 'set #age = :age ',
ConditionExpression: '#age = :testAge',
ExpressionAttributeNames: { '#age': 'age' },
ExpressionAttributeValues: { ':age': '40', ':testAge': '30' }
};

使用此,更新成功完成。如何在没有排序键的情况下更新表?

最佳答案

目前,DynamoDB 更新 API 没有仅通过分区键更新项目的选项。也没有类似于batchWriteItem 的batchUpdateItem API。

因此,如果排序键不可用,请获取分区键的所有排序键并更新分区和排序键组合的每一项。

For the primary key, you must provide all of the attributes. For example, with a simple primary key, you only need to provide a value for the partition key. For a composite primary key, you must provide values for both the partition key and the sort key.

示例代码:-

您可能需要针对您的表进行更改。下面的代码使用“Movies”表,其中“yearkey”作为分区键,“title”作为排序键。

以下代码更新给定哈希键“2012”的“createdate”属性。

变量paramsUpdate是根据查询操作形成的。请根据您的要求(即表结构)进行相应更新。逻辑保持不变,只需相应更改表名和键值即可。

var AWS = require("aws-sdk");
var creds = new AWS.Credentials('akid', 'secret', 'session');

AWS.config.update({
region : "us-west-2",
endpoint : "http://localhost:8000",
credentials : creds
});

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

var hashKey = 2012;

var paramsQuery = {
TableName : "Movies",
KeyConditionExpression : 'yearkey = :hkey',
ExpressionAttributeValues : {
':hkey' : hashKey

}
};

function updateItem(paramsUpdate) {
console.log("Updating the item...");
docClient.update(paramsUpdate, function(err, data) {
if (err) {
console.error("Unable to update item. Error JSON:", JSON.stringify(
err, null, 2));
} else {
console.log("UpdateItem succeeded:", JSON.stringify(data));
}
});
}

docClient.query(paramsQuery, function(err, data) {
if (err) {
console.error("Unable to read item. Error JSON:", JSON.stringify(err,
null, 2));
} else {
console.log(data.Count);
var itemIndex = 0;
while (itemIndex < data.Count) {

console.log('Hashkey to be updated ======>',
data.Items[itemIndex].yearkey,
';Title to be updated ========>',
data.Items[itemIndex].title);
var paramsUpdate = {
TableName : "Movies",
Key : {
"yearkey" : data.Items[itemIndex].yearkey,
"title" : data.Items[itemIndex].title
},
UpdateExpression : "set #createdate = :createdate",
ExpressionAttributeNames : {
'#createdate' : 'createdate'
},
ExpressionAttributeValues : {
':createdate' : '2016-11-17'
},
ReturnValues : 'UPDATED_NEW'
};
updateItem(paramsUpdate);
itemIndex++;

}
}
});

关于node.js - 无法更新 Dynamodb 表,出现 ValidationException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40661334/

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