MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Projeter un objet simple sur un document mangouste

Publier ma propre réponse pour que cela ne reste pas ouvert :

Les modèles de la version 4 (stable publié le 2015-03-25) exposent désormais un hydrate() méthode. Aucun des champs ne sera marqué comme modifié initialement, signifiant un appel à save() ne fera rien jusqu'à ce qu'un champ soit muté.

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

Il est très important de noter que ceci est destiné à être utilisé pour convertir un objet JS brut chargé à partir de la base de données en un document mangouste. Si vous recevez un document d'un service REST ou quelque chose comme ça, vous devez utiliser findById() et update() .

Pour ceux qui vivent dangereusement :

Si vous voulez vraiment mettre à jour un document existant sans toucher à la base de données, je suppose que vous pouvez appeler hydrate() , marquez les champs comme sales, puis appelez save() . Ce n'est pas trop différent de la méthode de définition de doc.isNew = false; comme je l'ai suggéré dans ma question initiale. Cependant, Valeri (de l'équipe de la mangouste) a suggéré de ne pas le faire. Cela pourrait entraîner des erreurs de validation et d'autres problèmes de cas extrêmes et n'est généralement pas une bonne pratique. findById est vraiment rapide et ne sera pas votre goulot d'étranglement.