我有以下最初用于创建用户的代码。
var params = {
TableName: 'myproject-user',
Item: {
id: req.body.userName,
email: req.body.email
}
};
if(req.body.currency) {
params.Item.currency = {
type: req.body.currency.type,
bank: req.body.currency.bank,
amount: req.body.currency.amount,
}
}
docClient.put(params, function(err, data) {
if (err) {
res.send({
success: false,
message: 'Error: ' + err
});
} else {
const { Items } = data;
res.send({
success: true,
message: 'Added user',
email: req.body.email
});
}
});
我现在要从put
切换到update
,因为我希望能够在更新电子邮件或名称时保留对象上的所有现有值。另外,我在params
对象中添加了以下行,以指定密钥为id
。
Key: { id : req.user.sub },
执行doc.update
代码,好像没有问题,我返回状态200
,但是当我查看表格时,信息尚未更新。
我需要使用表达式或其他方法来使update
正常工作吗?
更改代码:
var params = {
TableName: 'myproject-user',
Key: {"id":req.user.sub},
Item: {
id: req.body.userName,
email: req.body.email
}
};
docClient.update(params, function(err, data) {
if (err) {
res.send({
success: false,
message: 'Error: ' + err
});
} else {
const { Items } = data;
res.send({
success: true,
message: 'Added user',
email: req.body.email
});
}
});
答案 0 :(得分:1)
我可以通过使用UpdateExpression
,ExpressionAttributeValues
和ReturnValues
属性而不是described here来代替Item
属性来实现此目的,
var params = {
TableName: 'krncdev-user',
Key: {"id":req.user.sub},
UpdateExpression: "set email=:e",
ExpressionAttributeValues:{
":e": req.body.email
},
ReturnValues:"UPDATED_NEW"
};