Indsender mit eget svar, så dette ikke forbliver åbent:
Version 4-modeller (stabil udgivet 2015-03-25) viser nu en hydrate()
metode. Ingen af felterne vil blive markeret som beskidte oprindeligt, hvilket betyder et kald til save()
vil ikke gøre noget, før et felt er muteret.
gohttps://githubose /blob/41ea6010c4a84716aec7a5798c7c35ef21aa294f/lib/model.js#L1639-1657
Det er meget vigtigt at bemærke, at dette er beregnet til at blive brugt til at konvertere et almindeligt JS-objekt indlæst fra databasen til et mongoose-dokument. Hvis du modtager et dokument fra en REST-tjeneste eller lignende, skal du bruge findById()
og update()
.
For dem, der lever farligt:
Hvis du virkelig vil opdatere et eksisterende dokument uden at røre databasen, formoder jeg, at du kan kalde hydrate()
, marker felter som beskidte, og kald derefter save()
. Dette er ikke for anderledes end metoden til at indstille doc.isNew = false;
som jeg foreslog i mit oprindelige spørgsmål. Valeri (fra mongoose-holdet) foreslog dog ikke at gøre dette. Det kan forårsage valideringsfejl og andre edge case-problemer og er generelt ikke god praksis. findById er virkelig hurtig og vil ikke være din flaskehals.