如何将 updateExpression 与 AttributesUpdates 一起用于 node.js AWS dynamodb
How to use updateExpression with AttributesUpdates for node.js AWS dynamodb
我在 AWS dynamodb 中使用 api“updateItem”来更新项目。主要功能将是添加新项目或删除一个现有项目。但是,none 它们在以下代码中有效,ADD 的错误消息是“”ValidationException:无效的 UpdateExpression:运算符或函数的操作数类型不正确;运算符或函数:list_append,操作数类型:S。
这是我的代码:
const data = "newData";
async function updatedb(data) {
return new Promise((resolve, reject) =>{
var params = {
Key: {
"lists": {
S: data
}
},
TableName: "old_lists_DB",
UpdateExpression: "SET #L = list_append(:v,#L) ",
ExpressionAttributeNames: {
"#L": "lists",
},
ExpressionAttributeValues: {
":v": {
S: data
}
}
};
dynamodb.updateItem(params, function(err,data) {
if(err){
reject(err);
}else{
resolve(data);
}
});
});
}
old_lists_DB的schema很简单,只有一个属性:lists,value是一组string。
例如:
{
{"lists" : "a"},
{"lists" : "b"},
{"lists" : "c"},
}
考虑到 list 不能作为分区键,您有不同的分区键,而 list 只是一个属性。所以,你有一个字符串 data
,你想附加到 lists
类型列表。
有了这个,我看到了两件事,
Key:这应该包含分区键信息,在本例中我假设 id
是字符串类型。
list_append,我们应该传递一个列表本身。所以,ExpressionAttributeValues
我们需要用字符串构建一个数组。
这里是修改后的更新代码。
const data = "newData2";
const id = "1";
var params = {
Key: {
id: {
S: id,
},
},
TableName: "old_lists_DB",
UpdateExpression: "SET #L = list_append(:v,#L) ",
ExpressionAttributeNames: {
"#L": "lists",
},
ExpressionAttributeValues: {
":v": {
L: [{ S: data }],
},
},
};
dynamodb.updateItem(params, function (err, result) {
if (err) {
console.log("err", err);
} else {
console.log("result", result);
}
});
我在 AWS dynamodb 中使用 api“updateItem”来更新项目。主要功能将是添加新项目或删除一个现有项目。但是,none 它们在以下代码中有效,ADD 的错误消息是“”ValidationException:无效的 UpdateExpression:运算符或函数的操作数类型不正确;运算符或函数:list_append,操作数类型:S。 这是我的代码:
const data = "newData";
async function updatedb(data) {
return new Promise((resolve, reject) =>{
var params = {
Key: {
"lists": {
S: data
}
},
TableName: "old_lists_DB",
UpdateExpression: "SET #L = list_append(:v,#L) ",
ExpressionAttributeNames: {
"#L": "lists",
},
ExpressionAttributeValues: {
":v": {
S: data
}
}
};
dynamodb.updateItem(params, function(err,data) {
if(err){
reject(err);
}else{
resolve(data);
}
});
});
}
old_lists_DB的schema很简单,只有一个属性:lists,value是一组string。 例如:
{
{"lists" : "a"},
{"lists" : "b"},
{"lists" : "c"},
}
考虑到 list 不能作为分区键,您有不同的分区键,而 list 只是一个属性。所以,你有一个字符串 data
,你想附加到 lists
类型列表。
有了这个,我看到了两件事,
Key:这应该包含分区键信息,在本例中我假设 id
是字符串类型。
list_append,我们应该传递一个列表本身。所以,ExpressionAttributeValues
我们需要用字符串构建一个数组。
这里是修改后的更新代码。
const data = "newData2";
const id = "1";
var params = {
Key: {
id: {
S: id,
},
},
TableName: "old_lists_DB",
UpdateExpression: "SET #L = list_append(:v,#L) ",
ExpressionAttributeNames: {
"#L": "lists",
},
ExpressionAttributeValues: {
":v": {
L: [{ S: data }],
},
},
};
dynamodb.updateItem(params, function (err, result) {
if (err) {
console.log("err", err);
} else {
console.log("result", result);
}
});