sql >> Database >  >> NoSQL >> MongoDB

Werp gewoon object naar mangoestdocument

Mijn eigen antwoord posten zodat dit niet open blijft:

Versie 4-modellen (stabiel uitgebracht op 25-03-2015) onthult nu een hydrate() methode. Geen van de velden wordt gemarkeerd als vuil in eerste instantie, wat een oproep betekent om save() zal niets doen totdat een veld is gemuteerd.

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

Het is erg belangrijk op te merken dat dit bedoeld is om te worden gebruikt om een ​​gewoon JS-object dat uit de database is geladen, om te zetten in een mangoestdocument. Als u een document ontvangt van een REST-service of iets dergelijks, moet u findById() gebruiken en update() .

Voor degenen die gevaarlijk leven:

Als je echt een bestaand document wilt bijwerken zonder de database aan te raken, zou je hydrate() kunnen aanroepen. , markeer velden als vies en bel vervolgens save() . Dit is niet veel anders dan de methode voor het instellen van doc.isNew = false; zoals ik in mijn oorspronkelijke vraag suggereerde. Valeri (van het mangoestenteam) stelde echter voor dit niet te doen. Het kan validatiefouten en andere edge-case-problemen veroorzaken en is over het algemeen geen goede gewoonte. findById is erg snel en zal niet je bottleneck zijn.



  1. Regex-query's uitvoeren met PyMongo

  2. Casten naar ObjectId mislukt voor waarde 586cc8b3ea780c071bbe2469 op pad _id voor modelgebruiker

  3. mongodb 4.0 transacties ondersteuning voor node.js

  4. Hoe Mongo-query te versnellen?