En primer lugar, no necesita llamar a foundUser.save() cuando está utilizando el método foundUser.update().
Y, todos los métodos anteriores son casi igualmente eficientes ya que se realizan dos llamadas a la base de datos. Por lo tanto, todo se reduce a su preferencia personal.
Y, un método más con solo una llamada a la base de datos se puede ejecutar de esta manera:-
let foundUser = await userModel.findOneAndUpdate(
{ email: recievedEmail, password: hashedPassword },
{ $set: { lastLogin: new Date() }, $push: { myEvents: authEvent } }
);
En este método, si existe un usuario con correo electrónico y contraseña dados, ese usuario se actualizará y el documento actualizado correspondiente se devolverá en un foundUser
variable. Por lo tanto, no tiene que realizar una verificación adicional de la contraseña:If findOneAndUpdate()
devuelve un documento, significa que la contraseña y el correo electrónico coinciden. Solo tiene que verificar si es nulo o indefinido en el documento devuelto para que no coincida.