我需要更新我的 aws-dynamo 数据库上的列表。我创建了一个带有分区键的表:电子邮件。然后我成功地将一些电子邮件 ID 插入到表中。现在我的 table 是这样的
电子邮件
manaf1@gmail.com
manaf2@gmail.com
manaf3@gmail.com
然后,我尝试使用新键“details”更新表,其值是一个列表。这是我的代码
var AWS = require("aws-sdk");
var params =
{
TableName: "manaftable1",
Key: { email: "manaf1@gmail.com" },
UpdateExpression: "set #details = list_append (#details, :detailsinput)",
ExpressionAttributeNames: {
"#details": "details"
},
ExpressionAttributeValues: {
":detailsinput":{ "id": "1","mob": "978956" }
}
};
var docClient = new AWS.DynamoDB.DocumentClient();
docClient.update(params, function (err, data) {
if (err)
console.log(JSON.stringify(err, null, 2));
else
console.log(JSON.stringify(data, null, 2));
});
但是我遇到了这样的错误
{
"message": "Invalid UpdateExpression: Incorrect operand type for operator or function; operator or function: list_append, operand type: M",
"code": "ValidationException",
"time": "2016-10-26T11:04:60.756",
"requestId": "SN0NPRHDFHUKBBJHOVI0DFHHRQNSO5AEMVJFFGHF9ASFHUAAJG",
"statusCode": 400,
"retryable": false,
"retryDelay": 0
}
更新后我需要这样的回复
第 1 列:电子邮件
第2列:详细信息
manaf1@gmail.com | [{"id":"1","mob":"978956"},{"id":"2","mob":"767886"}]
manaf2@gmail.com |
与我的代码相关的问题是什么?
最佳答案
作为 list_append
says 的 AWS 文档:
The new element must be contained in a list, for example to add 2 to a list, the operand would be [2]
因此您需要附加一个对象数组,而不仅仅是一个对象:
var params =
{
TableName: "manaftable1",
Key: { email: "manaf1@gmail.com" },
UpdateExpression: "set #details = list_append (#details, :detailsinput)",
ExpressionAttributeNames: {
"#details": "details"
},
ExpressionAttributeValues: {
":detailsinput": [{ "id": "1","mob": "978956" }]
}
};
如果对象中不存在该属性,可以使用if_not_exists
操作数:
var params =
{
TableName: "manaftable1",
Key: { email: "manaf1@gmail.com" },
UpdateExpression: "set if_not_exists(#details, []) set #details = list_append (#details, :detailsinput)",
ExpressionAttributeNames: {
"#details": "details"
},
ExpressionAttributeValues: {
":detailsinput": [{ "id": "1","mob": "978956" }]
}
};
关于node.js - 使用 Node.js 更新表达式时出现 dynamo 数据库错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40261236/