Невозможно обновить элемент в DynamoDB
Я пытался выяснить, как обновить элемент в DynamoDB, но не удалось.
Я знаю, как добавить и элемент и удалить элемент, но не обновить.
Вот мой код:
dynamoDB.updateItem({
"TableName": "mytable",
"Key": {
"thing_ID": {"S": "0000"}
},
"UpdateExpression": "SET",
"ExpressionAttributeNames": {
"SessionID": ""
},
"ExpressionAttributeValues": {
"SessionID": {
"S": "maybe this works",
}
}
})
3 ответа
Решение
Похоже, вы пытаетесь обновить элемент с помощью выражения, и в этом случае ваш UpdateExpression
это неверно. Оба ExpressionAttributeNames
а также ExpressionAttributeValues
используются для замены заполнителя в вашем выражении.
Я думаю, что ваш код будет выглядеть примерно так, если вы хотите установить атрибут для элемента:
dynamoDB.updateItem({
"TableName" : "exampleTable",
"Key" : {
"hashAttributeName" : {
"S" : "thing_ID"
}
},
"UpdateExpression" : "SET #attrName =:attrValue",
"ExpressionAttributeNames" : {
"#attrName" : "SessionID"
},
"ExpressionAttributeValues" : {
":attrValue" : {
"S" : "maybe this works"
}
}
});
Это обновит элемент, который выглядит следующим образом:
{
"Item":{
"hashAttributeName":"thing_ID"
}
}
К этому:
{
"Item":{
"hashAttributeName" : "thing_ID",
"SessionID" : "maybe this works"
}
}
Вот пример использования AWS SDK для JavaScript v2.1.33.
Полный пример здесь: https://github.com/mayosmith/HelloDynamoDB/blob/master/HelloDynamoDB.html
/*
-----------------------------------------------------------------
AWS configure
Note: this is a simple experiement for demonstration
purposes only. Replace the keys below with your own.
Do not include the secret key in an actual production
environment, because, then, it wont be secret anymore...
-----------------------------------------------------------------
*/
AWS.config.update({accessKeyId: 'AKIAJUPWRIYYQGDB6AFA', secretAccessKey: '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'});
// Configure the region
AWS.config.region = 'us-west-2'; //us-west-2 is Oregon
//create the ddb object
var ddb = new AWS.DynamoDB();
/*
-----------------------------------------------------------------
Update the Table
-----------------------------------------------------------------
*/
//update the table with this data
var params = {
Key: {
name: {S: 'John Mayo-Smith'},
city: {S: 'New York'}
},
AttributeUpdates: {
food: {
Action: 'PUT',
Value: {S: 'chocolate'}
}
},
TableName: 'sampletable',
ReturnValues: 'ALL_NEW'
};
//update the table
update();
/*
-----------------------------------------------------------------
Get Item from the Table
-----------------------------------------------------------------
*/
//attribute to read
var readparams = {
Key: {
name: {S: 'John Mayo-Smith'},
city: {S: 'New York'}
},
AttributesToGet: ['food'],
TableName: 'sampletable'
};
//get the item
read();
/*
-----------------------------------------------------------------
function update()
Description: Calls updateItem which is part of the AWS Javascript
SDK.
Returns: JSON object (the object is stringifyed so we can see
what's going on in the javascript console)
-----------------------------------------------------------------
*/
function update(){
ddb.updateItem(params, function(err, data) {
if (err) { return console.log(err); }
console.log("We updated the table with this: " + JSON.stringify(data));
});
}
/*
-----------------------------------------------------------------
function read()
Description: Calls getItem which is part of the AWS Javascript
SDK.
Returns: JSON object (the object is stringifyed so we can see
what's going on in the javascript console)
-----------------------------------------------------------------
*/
function read(){
ddb.getItem(readparams, function(err, data) {
if (err) { return console.log(err); }
console.log(": " + data);
console.log("John's favorite food is: "+ JSON.stringify(data.Item.food.S)); // print the item data
});
}
Ниже код работает для меня, попробуйте один раз
var item = {"endTime": "7pm", "imageName": "7abcd", "startTime": "7pm"};
dynamo.updateItem({
TableName:'tableName',
Key:{"primaryKey":"primaryKeyValue"},
AttributeUpdates: { images: { Action: "ADD", Value: item } }},function(err, data) {
if (err)
console.log(err);
else
console.log(data)
});