我正在尝试做一个最简单的操作"更新"在发电机数据库列表中。
表格式 -
businessId : String, customers: StringSet, itemCode : NumberSet
我通过put插入了一个条目 -
bussinessId = "sampleBusiness", cuatomers 0: "cust1", itemCode 0: 4554
我想使用更新添加更多项目,这是我尝试过的 -
var updateRequest = {
'TableName' : tableName,
'Key' : {
'businessId' : {
"S" : businessId
}
},
'UpdateExpression' : "SET itemCode[2] =:attrValue",
'ExpressionAttributeValues' : {
':attrValue' : {
"N" : "564564"
}
}
};
这给了我错误 -
文档中提供的文档路径无效
我想添加新条目,所以也尝试了这个 -
var sm = [];
sm[0] = "56465";
//Add business to
var updateRequest = {
'TableName' : tableName,
'Key' : {
'businessId' : {
"S" : businessId
}
},
'UpdateExpression' : 'SET #attrName = list_append(#attrName, :attrValue)',
'ExpressionAttributeNames' : {
'#attrName' : 'itemCode'
},
'ExpressionAttributeValues' : {
':attrValue' : {
"NS" : sm
}
}
};
这给出了:
ValidationException:无效的UpdateExpression:运算符或函数的操作数类型不正确;运算符或函数:list_append,操作数类型:NS
也尝试了这个 -
':attrValue' : {
"N" : "4564"
}
但同样的错误。
根据http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.Modifying.html中提供的示例,它会在FiveStar
审核列表中添加新元素。表达式属性名称#pr
为ProductReviews
;属性值:r
是一个单元素列表。如果列表先前有两个元素,[0]和[1],则新元素将为[2]。
SET #pr.FiveStar = list_append(#pr.FiveStar, :r)
表示:r
是一个元素列表
我在这里遗漏了一些东西。请求任何人可以提供帮助。对此持续了很长时间。我只想使用nodeJS在dynamo db中添加元素。
答案 0 :(得分:0)
看起来像这样:
'ExpressionAttributeValues' : {
':attrValue' : {
"NS" : sm
}
}
应该是这样的:
'ExpressionAttributeValues' : {
':attrValue' : {
"S" : sm
}
}
或者您需要将此值sm[0] = "56465";
转换为数字Number("56465")
,并将:attrValue
数据类型"S"
更改为"N"
。取决于您如何配置表格。
您也应该将:attrValue
指定为"S" : sm[0]
,因为现在您正在传递"S"
整个数组。
答案 1 :(得分:-2)
我得到了一个合适的解决方案
var item = {"endTime": "7pm", "imageName": "7abcd", "startTime": "7pm"};
dynamo.updateItem({
TableName:'TableName',
Key:{"BucketName":"abcdefg" },
UpdateExpression : "SET #attrName = list_append(#attrName, :attrValue)",
ExpressionAttributeNames : {
"#attrName" : "ImageLists"
},
ExpressionAttributeValues : {
':attrValue' : [item]
}
},function(err, data) {
if (err)
console.log(err);
else
console.log(data)
});