Chociaż wyglądałoby to na .save() jest tutaj właściwym podejściem, .update() polecenie wykona zadanie, ignorując „warunki wyścigu”, które powodują wystąpienie tego błędu. Mongo DB zgłasza ten błąd, ponieważ obawia się, że zapisuję starszą wersję dokumentu, która została już zaktualizowana:
- v1 jest wysyłany do klienta
- v1 jest zapisany i zaktualizowany do v2 w Mongo DB
- v1 próbuje zostać ponownie zapisany, ale Mongo DB ma już zapisaną wersję v2, zgłaszany jest błąd
Lepszym podejściem jest wysłanie v1 do klienta, a gdy obiekt koszyka się zmieni, zsynchronizuj obiekt z nowym obiektem koszyka bez względu na wszystko. Można to zrobić za pomocą .update() zamiast przez .save() .
Dzieje się tak, ponieważ .save() obserwuje i dba o kontrolę wersji, podczas gdy .update() zaktualizuje obiekt niezależnie od kontroli wersji.