Tenía el siguiente código que originalmente funcionaba para crear un usuario.

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

Ahora estoy cambiando de put a update, ya que quiero poder mantener los valores existentes en el objeto mientras actualizo el correo electrónico o el nombre. Además, agregué la siguiente línea en el objeto params para especificar la clave que es id.

Key: { id : req.user.sub },

El código doc.update se ejecuta y recupero el estado 200 como si no hubiera ningún problema, pero cuando miro la tabla, la información no se ha actualizado.

¿Necesito usar una expresión o algo para que update funcione?

Código con cambios:

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
Philip Kirkbride 12 oct. 2019 a las 18:29

1 respuesta

La mejor respuesta

Pude hacer que esto funcionara usando los atributos UpdateExpression, ExpressionAttributeValues y ReturnValues en lugar de Item, como descrito aquí:

var params = {
  TableName: 'krncdev-user',
  Key: {"id":req.user.sub},
  UpdateExpression: "set email=:e",
  ExpressionAttributeValues:{
      ":e": req.body.email
  },
  ReturnValues:"UPDATED_NEW"
};
1
Philip Kirkbride 12 oct. 2019 a las 15:47