MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Trasmetti un oggetto semplice in un documento di mangusta

Pubblicare la mia risposta in modo che non rimanga aperta:

I modelli della versione 4 (stabile rilasciata il 25-03-2015) ora espongono un hydrate() metodo. Nessuno dei campi sarà contrassegnato come sporco inizialmente, significa una chiamata a save() non farà nulla finché un campo non sarà mutato.

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

È molto importante notare che questo è inteso per essere utilizzato per convertire un semplice oggetto JS caricato dal database in un documento mangusta. Se stai ricevendo un documento da un servizio REST o qualcosa del genere, dovresti usare findById() e update() .

Per chi vive pericolosamente:

Se vuoi davvero aggiornare un documento esistente senza toccare il database, suppongo che potresti chiamare hydrate() , contrassegna i campi come sporchi e quindi chiama save() . Questo non è troppo diverso dal metodo di impostazione di doc.isNew = false; come ho suggerito nella mia domanda originale. Tuttavia, Valeri (della squadra della mangusta) ha suggerito di non farlo. Potrebbe causare errori di convalida e altri problemi di edge case e in genere non è una buona pratica. findById è davvero veloce e non sarà il tuo collo di bottiglia.