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

Støb almindeligt objekt til mongoose-dokument

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.



  1. Læs fra Kinesis giver tomme poster, når de køres med tidligere sekvensnummer eller tidsstempel

  2. Meteor:forskel mellem navne på samlinger, variabler, publikationer og abonnementer?

  3. Mongo Giver 'duplicate key error' på ikke-unikke felter

  4. Hvorfor anbefaler MongoDB-dokumenterne ikke at bruge DBREF'er?