Публикувам собствения си отговор, така че това да не остане отворено:
Моделите на версия 4 (стабилно пуснати на 2015-03-25) вече излагат hydrate()
метод. Нито едно от полетата няма да бъде маркирано като мръсно първоначално, което означава извикване на save()
няма да направи нищо, докато дадено поле не бъде мутирано.
Много е важно да се отбележи, че това е предназначено да се използва за конвертиране на обикновен JS обект, зареден от базата данни, в mongoose документ. Ако получавате документ от REST услуга или нещо подобно, трябва да използвате findById()
и update()
.
За тези, които живеят опасно:
Ако наистина искате да актуализирате съществуващ документ, без да докосвате базата данни, предполагам, че можете да извикате hydrate()
, маркирайте полетата като мръсни и след това извикайте save()
. Това не е твърде различно от метода за настройка на doc.isNew = false;
както предложих в първоначалния си въпрос. Валери (от отбора на мангустите) обаче предложи да не се прави това. Това може да причини грешки при валидиране и други проблеми с крайния случай и като цяло не е добра практика. findById е наистина бърз и няма да бъде вашето тясно място.