如果用户以前使用Javascript保存过数据,DynamoDB不会保存数据

如果用户以前使用Javascript保存过数据,DynamoDB不会保存数据,javascript,amazon-dynamodb,aws-lambda,Javascript,Amazon Dynamodb,Aws Lambda,我正在开发一个带有DynamoDB&Lambda功能的评论应用程序,如果用户之前在电影上写过评论,那么在保存评论时会出现问题。这就是我保存评论的方式 const参数={ 表名:“电影评论”, 项目:{ “电影id”:{ S:电影ID }, “审查id”:{ 学生:复习 }, “添加人”:{ S:用户名 }, “添加日期”:{ S:添加了日期 }, “费率”:{ N:影响者比率 }, “审查”:{ S:回顾 } } }; dynamodb.putItem(参数、函数(错误、数据){ 如果(错误)

我正在开发一个带有DynamoDB&Lambda功能的评论应用程序,如果用户之前在电影上写过评论,那么在保存评论时会出现问题。这就是我保存评论的方式

const参数={
表名:“电影评论”,
项目:{
“电影id”:{
S:电影ID
},
“审查id”:{
学生:复习
},
“添加人”:{
S:用户名
},
“添加日期”:{
S:添加了日期
},
“费率”:{
N:影响者比率
},
“审查”:{
S:回顾
}
}
};
dynamodb.putItem(参数、函数(错误、数据){
如果(错误){
日志(err,err.stack);
回调(null,err.stack);
}否则{
控制台日志(数据);
回调(空);
}

});首先,在nodejs中,您不必像定义
属性时那样使用混乱的语法

阅读有关aws.DynamoDB.DocumentClient的信息


关于您的问题,它高度依赖于表的建模

如果我希望允许对一部电影进行多次评论,但每个用户最多只能进行一次评论,那么我会将分区键设置为电影ID,将行键(排序键)设置为用户ID,这两个键都在表中形成一个唯一的项ID

这样,如果创建了一条记录(意味着用户Y对电影X进行了审查),那么您将无法添加另一条记录,因为您将收到某种冲突错误,这意味着用户Y已经对电影X进行了审查


这将允许您高效地查询每个电影ID的所有评论-我假设这就是您想要的

非常感谢您的回答和额外的信息!对我很有用!还有一个问题,我从您那里实现了一个解决方案,现在它正在更新现有数据,而不是给我一个错误。您是否知道不进行更新?请阅读本页:>若要防止新项替换现有项,请使用包含属性_not_exists函数的条件表达式,该属性的名称用作表的分区键。由于每个记录都必须包含该属性,因此只有在不存在匹配项的情况下,attribute_not_exists函数才会成功。