Po pierwsze, nie musisz wywoływać metody foundUser.save(), gdy używasz metody foundUser.update().
Wszystkie powyższe metody są prawie równie wydajne, ponieważ do bazy danych są wykonywane dwa wywołania. Tak więc sprowadza się to do twoich osobistych preferencji.
I jeszcze jedna metoda z tylko jednym wywołaniem bazy danych może być wykonana w ten sposób:-
let foundUser = await userModel.findOneAndUpdate(
{ email: recievedEmail, password: hashedPassword },
{ $set: { lastLogin: new Date() }, $push: { myEvents: authEvent } }
);
W tej metodzie, jeśli istnieje użytkownik z podanym adresem e-mail i hasłem, zostanie on zaktualizowany, a odpowiedni zaktualizowany dokument zostanie zwrócony w foundUser
zmienny. Nie musisz więc przeprowadzać dodatkowego sprawdzania hasła:Jeśli findOneAndUpdate()
zwraca dokument, oznacza to, że hasło i adres e-mail pasują. Musisz tylko sprawdzić, czy w zwróconym dokumencie nie ma wartości null lub undefined.