MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Gießen Sie ein einfaches Objekt in ein Mongoose-Dokument

Meine eigene Antwort posten, damit dies nicht offen bleibt:

Modelle der Version 4 (stabil veröffentlicht am 25.03.2015) stellen jetzt einen hydrate() Methode. Keines der Felder wird als dirty markiert anfänglich, was einen Aufruf von save() bedeutet wird nichts tun, bis ein Feld mutiert wird.

https://github.com/LearnBoost/mongoose /blob/41ea6010c4a84716aec7a5798c7c35ef21aa294f/lib/model.js#L1639-1657

Es ist sehr wichtig zu beachten, dass dies dazu gedacht ist, ein einfaches JS-Objekt, das aus der Datenbank geladen wird, in ein Mongoose-Dokument umzuwandeln. Wenn Sie ein Dokument von einem REST-Dienst oder ähnlichem erhalten, sollten Sie findById() verwenden und update() .

Für diejenigen, die gefährlich leben:

Wenn Sie wirklich ein vorhandenes Dokument aktualisieren möchten, ohne die Datenbank zu berühren, könnten Sie vermutlich hydrate() aufrufen , markieren Sie Felder als schmutzig und rufen Sie dann save() auf . Dies unterscheidet sich nicht allzu sehr von der Methode zum Setzen von doc.isNew = false; wie ich in meiner ursprünglichen Frage vorgeschlagen habe. Valeri (vom Mungo-Team) schlug jedoch vor, dies nicht zu tun. Dies kann zu Validierungsfehlern und anderen Randproblemen führen und ist im Allgemeinen keine gute Vorgehensweise. findById ist wirklich schnell und wird nicht Ihr Flaschenhals sein.