Först och främst behöver du inte anropa foundUser.save() när du använder metoden foundUser.update().
Och alla ovanstående metoder är nästan lika effektiva eftersom det görs två anrop till databasen. Så det beror på din personliga preferens.
Och ytterligare en metod med bara ett anrop till databasen kan exekveras på detta sätt:-
let foundUser = await userModel.findOneAndUpdate(
{ email: recievedEmail, password: hashedPassword },
{ $set: { lastLogin: new Date() }, $push: { myEvents: authEvent } }
);
I den här metoden, om det finns en användare med angiven e-postadress och lösenord, kommer den användaren att uppdateras och motsvarande uppdaterade dokument kommer att returneras i en foundUser
variabel. Så du behöver inte utföra en extra kontroll av lösenordet:Om findOneAndUpdate()
returnerar ett dokument betyder det att lösenord och e-postadress matchas. Du måste bara kontrollera om det är null eller odefinierat på det returnerade dokumentet för att inte matcha.