Zveřejňuji vlastní odpověď, aby to nezůstalo otevřené:
Modely verze 4 (stabilní vydané 2015-03-25) nyní odhalují hydrate()
metoda. Žádné z polí nebude označeno jako špinavé zpočátku, což znamená volání save()
neudělá nic, dokud nebude pole zmutováno.
/Goosegit /blob/41ea6010c4a84716aec7a5798c7c35ef21aa294f/lib/model.js#L1639-1657
Je velmi důležité poznamenat, že toto je určeno pro převod prostého JS objektu načteného z databáze na mongoose dokument. Pokud přijímáte dokument ze služby REST nebo něčeho podobného, měli byste použít findById()
a update()
.
Pro ty, kteří žijí nebezpečně:
Pokud opravdu chcete aktualizovat existující dokument, aniž byste se dotkli databáze, předpokládám, že byste mohli zavolat hydrate()
, označte pole jako špinavá a pak zavolejte save()
. To se příliš neliší od metody nastavení doc.isNew = false;
jak jsem navrhoval ve své původní otázce. Valeri (z týmu mongoose) však navrhl, aby to nedělal. Mohlo by to způsobit chyby ověření a další problémy s okrajovými případy a obecně to není dobrá praxe. findById je opravdu rychlý a nebude vaším úzkým hrdlem.