DynamoDb从Node.js更新项目

时间:2019-10-12 15:29:03

标签: amazon-dynamodb

我有以下最初用于创建用户的代码。

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
    });
  }
});

1 个答案:

答案 0 :(得分:1)

我可以通过使用UpdateExpressionExpressionAttributeValuesReturnValues属性而不是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"
};